我的CSV文件有12列(製表符分隔),我想打印出前11列。我想出了這個awk代碼,但它破壞了格式(不再有製表符分隔符)。我需要一些幫助來保持格式,而只打印出前11列。幫助表示讚賞。awk:打印前11列(不包括最後一列)
awk '{for(i=1;i<12;i++)printf "%s",$i OFS}'
我的CSV文件有12列(製表符分隔),我想打印出前11列。我想出了這個awk代碼,但它破壞了格式(不再有製表符分隔符)。我需要一些幫助來保持格式,而只打印出前11列。幫助表示讚賞。awk:打印前11列(不包括最後一列)
awk '{for(i=1;i<12;i++)printf "%s",$i OFS}'
像這樣的東西應該做你想做的事情,假設你想在每個輸入字段之間使用單個選項卡。
awk -vOFS='\t' '{NF=NF-1}1' $file
-vOFS='\t'
設置OFS
到製表符。
NF=NF-1
告訴awk該行有一個比它開始的字段更少的字段,並導致它重新計算$0
的值。
1
模式有默認打印,所以使用任何真值打印$0
。
嘗試使用awk '{NF=NF-1}1' OFS='\t' $file
代替或不符合awk 'BEGIN{OFS="\t"} {NF=NF-1}1' $file
以避免-v
。
一些awk
variaton
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
第一個將會失敗(對於負NF,awk錯誤,至少在gawk 3.1.5時),並且會完全刪除只有一個字段的行而不是根據需要打印空行)。 –
,如果你有紅寶石您的系統上
# ruby -ne 'puts $_.split("\t")[0..10].join("\t")' file
你試圖'cut'呢? – Rubens
'awk'{for(i = 1; i <12; i ++)printf「%s \ t」,$ i OFS}''? – suspectus
是的。削減可能更適合這個目的。這就是說你需要設置OFS到你想要的分隔符(即標籤)。 –