Linux 如果第一个字母不是字母,请使用awk将一列值替换为另一列值
我有以下csv文件: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
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
。