awk:打印前11列(省略最后一列)

时间:2014-01-07 22:08:34

标签: csv awk

我的CSV文件有12列(制表符分隔),我想打印出前11列。我想出了以下awk代码,但它破坏了格式(不再有制表符分隔符)。我需要一些帮助来维护格式,同时只打印出前11列。感谢帮助。

awk '{for(i=1;i<12;i++)printf "%s",$i OFS}'

3 个答案:

答案 0 :(得分:2)

这样的事情可以做你想要的,假设你想要在每个输入字段之间有一个标签。

awk -vOFS='\t' '{NF=NF-1}1' $file

-vOFS='\t'OFS设置为制表符。

NF=NF-1告诉awk该行的字段少于其开头的字段,并使其重新计算$0的值。

1个模式的默认值为print,因此请使用任意值来打印$0

请尝试使用awk '{NF=NF-1}1' OFS='\t' $file或使awk 'BEGIN{OFS="\t"} {NF=NF-1}1' $file失败以避免-v

答案 1 :(得分:1)

一些awk变体

awk 'NF-=1' OFS=\\t $file
awk '{NF-=1}1' OFS=\\t $file
awk '{NF-=1}1' OFS="\t" $file
awk -v OFS="\t" '{NF-=1}1' $file

答案 2 :(得分:0)

如果您的系统上有Ruby

# ruby -ne 'puts $_.split("\t")[0..10].join("\t")' file