有一个格式错误的 tsv 文件,到处都是空字段。我希望在 linux 上用“NA”填充这些空白区域。
我试过 awk '{gsub("\t\t","\tNA\t"); print$0)'
但这只会用一个空格替换 NA 实例。链接命令 awk '{gsub("\t\t","\tNA\t"); print$0)|awk '{gsub("\t\t","\tNA\t"); print$0)
每行做两次替换 - 但如果我有很多列要处理,则不是特别有用。
有没有更快(更简洁)的方法来做到这一点?
它有点复杂,因为您必须处理换行空字段、行尾空字段和可能连续的空字段。我无法用 sed 实现某些目标,这可能是疯了。但是对于 awk 这似乎有效:
$ cat test.txt
a c d e
g h i j
k l m n
p s t
w x
$ awk -F$'\t' '{for(i=1;i<=NF;++i){if($i==""){printf "NA"}else{printf $i} if(i<NF)printf "\t"} printf "\n"}' test.txt
a NA c d e
NA g h i j
k l m n NA
p NA NA s t
NA NA w x NA
当心复制粘贴,制表符可能会被转换为空格...顺便说一句,我搜索了 CSV 文件的解决方案,并从 this thread 中对其进行了改编。 ;) 您可以在其中看到最具可读性的选项是 awk 选项。
我是一名优秀的程序员,十分优秀!