我的CSV文件有12列(制表符分隔),我想打印出前11列。我想出了以下awk代码,但它破坏了格式(不再有制表符分隔符)。我需要一些帮助来维护格式,同时只打印出前11列。感谢帮助。
awk '{for(i=1;i<12;i++)printf "%s",$i OFS}'
答案 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