我的CSV文件有12列(制表符分隔),我想打印出前11列。我想出了下面这段awk代码,但它破坏了格式(不再使用制表符分隔符)。我需要一些帮助来维护格式,同时只打印出前11列。感谢您的帮助。
awk '{for(i=1;i<12;i++)printf "%s",$i OFS}'发布于 2014-01-08 06:14:43
假设您希望在每个输入字段之间有一个单独的制表符,这样的代码应该可以做您想要做的事情。
awk -vOFS='\t' '{NF=NF-1}1' $file-vOFS='\t'将OFS设置为制表符。
NF=NF-1告诉awk该行比开始时少了一个字段,并使其重新计算$0的值。
1模式的默认值是print,因此可以使用任何true值来打印$0。
请尝试awk '{NF=NF-1}1' OFS='\t' $file,或者使该awk 'BEGIN{OFS="\t"} {NF=NF-1}1' $file失败以避免-v。
发布于 2014-01-08 14:35:40
一些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发布于 2014-01-08 21:10:26
如果您的系统上有Ruby
# ruby -ne 'puts $_.split("\t")[0..10].join("\t")' filehttps://stackoverflow.com/questions/20982974
复制相似问题