我有一个包含许多列和不同列中的一些空单元格的文件。我想仅在第三列中替换 NA 的空单元格。我的文件:
1 id1 info
2 otherinfo
3 id2
4 noinfo
5 id3
6 id4 info2
所以输出应该是:
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
我尝试了这个命令(用零替换缺失值空格),但它替换了所有空单元格。有什么建议么?
答案1
短的awk解决方案:
awk -F'[[:space:]]' '$2 && !$3{ $3="NA" }1' file
输出:
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
答案2
如果您的文件具有固定宽度的列,您可以使用 GNU awk 来解析它们FIELDWIDTHS
,例如:
awk -v FIELDWIDTHS='1 1 3 1 99' -v OFS="" '!$5 { $5 = " NA" } 1' infile
输出:
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
答案3
这sed
对我有用:
sed -E 's/(.*id[0-9]{1,}$)/\1 NA/'
例子:
sed -E 's/(.*id[0-9]{1,}$)/\1 NA/' NA.txt
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
NA.txt
这个文件在哪里:
cat NA.txt
1 id1 info
2 otherinfo
3 id2
4 noinfo
5 id3
6 id4 info2