首页 > 解决方案 > 如果第一个字母不是字母,则使用 awk 将一个列值替换为另一个列值

问题描述

我有以下 csv 文件:

ID                Name          Gender        NID
Y12               Jim              M          C12
Y23               David            M          C23
234               Bob              M          C22
2b1               Lucy             F          C24
2bb               Lily             F          C25

如果 ID 中的第一个字母不是字母,我想要做的是用 NID 值替换 ID 列的值。所以预期的输出是

ID                Name          Gender        NID
Y12               Jim              M          C12
Y23               David            M          C23
C22               Bob              M          C22
C24               Lucy             F          C24
C25               Lily             F          C25

这只是一个示例。我的原始数据大小要大得多,所以我必须使用awk. 关键问题是如何指定条件。我不清楚如何处理。我在想的代码就像awk -F, 'if $1 != ..., $1=$4'. 我也用谷歌搜索但未能找到合适的解决方案。这是一个我认为可能有帮助的链接。 过滤第一列中只有字母的行。谢谢你。

标签: linuxawk

解决方案


使用正则表达式。

awk '$1 ~ /^[^A-Z]/ { $1 = $4 }1' filename

演示


推荐阅读