如何替换特定列的空单元格

如何替换特定列的空单元格

我有一个包含许多列和不同列中的一些空单元格的文件。我想仅在第三列中替换 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

相关内容