通过awk删除空列

Von*_*ton 2 printing awk is-empty

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

输入:超过90列的tsv文件

a b   d e   g...  
a b   d e   g...
Run Code Online (Sandbox Code Playgroud)

输出:tsv文件无空列

a b d e g....
a b d e g...
Run Code Online (Sandbox Code Playgroud)

谢谢

Ed *_*ton 5

这可能是您想要的:

$ 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
Run Code Online (Sandbox Code Playgroud)

请注意,上面的方法并不能像某些潜在的解决方案那样删除所有空列,而只是删除您要删除的列号:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 哇?!不错! (2认同)
  • 我用RS替换了每个目标字段的内容,因此我可以删除每个RS和FS之前的所有内容,并保留其余的字段+分隔符。如果目标字段是第一个字段,那么在它之前就不会有FS,因此我通过删除`^ RS`和`FS RS`来容纳它。 (2认同)