使用awk或从linux上的命令行删除文件中的列

use*_*487 23 awk

如何从选项卡分隔的字段文件中删除一些列awk

c1 c2 c3 ..... c60
Run Code Online (Sandbox Code Playgroud)

例如,删除3到29 之间的列.

Ste*_*ton 43

这是cut命令的用途:

cut -f1,2,30- inputfile
Run Code Online (Sandbox Code Playgroud)

默认为选项卡.您可以使用-d开关更改它.

  • @becko有一个共同的扩展,`--complement`,它用输入字段数字表示,例如:`cut --complement -f3`. (2认同)

oli*_*ver 12

您可以遍历所有列并过滤掉您不想要的列:

awk '{for (i=1; i<=NF; i++) if (i<3 || i>29) printf $i " "; print""}' input.txt
Run Code Online (Sandbox Code Playgroud)

其中,NF为您提供记录中的字段总数.
对于满足条件的每列,我们打印列,后跟空格" ".


编辑:约翰尼的评论后更新:

awk -F 'FS' 'BEGIN{FS="\t"}{for (i=1; i<=NF-1; i++) if(i<3 || i>5) {printf $i FS};{print $NF}}' input.txt
Run Code Online (Sandbox Code Playgroud)

这有两种改进:

  • 保留原始分隔符
  • 不会在末尾添加分隔符