2014-03-12 59 views
1

我有一個相當大的文件,裏面有255個昏迷分隔的列,我只需要打印出每隔三欄。打印文件的第n列

我是想這樣的事情

awk '{ for (i=0;i<=NF;i+=3) print $i }' file 

但似乎並沒有被解決,因爲它打印到只有一個長列。任何人都可以幫忙?謝謝

回答

2

它的行爲如此,因爲默認拆分空間中的字段。你必須告訴它用逗號分隔它們,它使用FS變量或-F開關完成。除此之外,第一場是第一場。零爲整條生產線,因此也改變了for循環的初始值:

awk -F',' '{ for (i=1;i<=NF;i+=3) print $i }' file 
3

下面是做到這一點的方法之一。

腳本prog.awk:

BEGIN {FS = ","} # field separator 
{for (i = 1; i <= NF; i += 3) printf ("%s%c", $i, i + 3 <= NF ? "," : "\n");} 

調用:

awk -f prog.awk <input.csv >output.csv 

例input.csv:

1,2,3,4,5,6,7,8,9,10 
11,12,13,14,15,16,17,18,19,20 

例output.csv:

1,4,7,10 
11,14,17,20 
+1

+1在39秒內擊敗我! 'awk -F'{for(i = 1; i <= NF; i + = 2)printf「%s%s」,$ i,(i + 3> NF?「\ n」:FS)}''' – Kent