Linux 如果第一个字母不是字母,请使用awk将一列值替换为另一列值

Linux 如果第一个字母不是字母,请使用awk将一列值替换为另一列值,linux,awk,Linux,Awk,我有以下csv文件: ID Name Gender NID Y12 Jim M C12 Y23 David M C23 234 Bob M C22 2b1 Lucy F

我有以下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 colunm的值。 因此,预计产出将是

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'
。我也在谷歌上搜索过,但没有找到合适的解决方案。 这里有一个链接,我认为可能会有所帮助。
. 谢谢。

使用正则表达式

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

如果您可以指望ID列始终为3个字符,这将保留表格格式:

awk '{ sub("^[^[:alpha:]]..", $4) } 1' file

您的输入不是csv,您是否复制了错误的文本?这只是一个示例。我的真实数据非常大,所以我不能在这里发布。我想如果它是csv文件,用“,”分隔,那么我们只需要写“`awk-F,````,这可以帮助
awk
识别csv文件。在这种情况下,您可以。但是你最好发布一个更具代表性的数据和输出样本,因为它可能会改变人们给出的答案。我将首先将这些发布的解决方案应用到我的原始数据中,看看它们是否有效。如果没有,那么我将从我的数据中发布一个示例。@Samson最后你是否遗漏了
1
。@Samson,我在学习时发现格里米尔教程非常有用-@Barmar嗨,还有一个子问题。我发现这样的代码不能帮助我区分第一个字母是否大写。只要第一个字母是字母表,那么ID将被NID替换。如果我只想用大写字母更改ID怎么办?我的代码区分大小写,只有以大写字母开头的ID才会保留。不管怎样,如果你想同样对待大写字母和小写字母,请将
A-Z
更改为
A-Za-Z