首页 > 解决方案 > 通过 awk 删除空列

问题描述

我有一个输入文件,它是制表符分隔的,但我想删除所有空列。空列:$13=$14=$15=$84=$85=$86=$87=$88=$89=$91=$94

输入:超过 90 列的 tsv 文件

a b   d e   g...  
a b   d e   g...

输出:没有空列的 tsv 文件

a b d e g....
a b d e g...

谢谢

标签: awkprintingis-empty

解决方案


这可能是你想要的:

$ printf 'a\tb\tc\td\te\n'
a       b       c       d       e

$ printf 'a\tb\tc\td\te\n' | awk 'BEGIN{FS=OFS="\t"} {$2=$4=""} 1'
a               c               e

$ printf 'a\tb\tc\td\te\n' | awk 'BEGIN{FS=OFS="\t"} {$2=$4=RS; gsub("(^|"FS")"RS,"")} 1'
a       c       e

请注意,上述内容不会像某些潜在的解决方案那样删除所有空列,它只会删除您想要删除的列号:

$ printf 'a\tb\t\td\te\n'
a       b               d       e

$ printf 'a\tb\t\td\te\n' | awk 'BEGIN{FS=OFS="\t"} {$2=$4=RS; gsub("(^|"FS")"RS,"")} 1'
a               e

推荐阅读