打印文件的每第n列

时间:2014-03-12 14:07:21

标签: awk

我有一个包含255个逗号分隔列的相当大的文件,我只需要打印每三个列。

我正在尝试这样的事情

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

但这似乎不是解决方案,因为它只打印到一个长列。有人可以帮忙吗?感谢

2 个答案:

答案 0 :(得分:4)

这是一种方法。

脚本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 :(得分:3)

它的行为与此类似,因为默认情况下会拆分空格中的字段。你必须告诉它用逗号分隔它们,并使用FS变量或-F开关完成它。除此之外,第一个领域是第一名。零是整行,因此也要更改for循环的初始值:

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