打印文件中每个第n列

8

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

我尝试过以下代码:

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

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

2个回答

9
这里有一种方法可以实现这个。
脚本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

输出示例.csv:

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

2
在39秒内击败我得到+1!! awk -F, '{for(i=1;i<=NF;i+=2)printf "%s%s", $i, (i+3>NF?"\n":FS)}' - Kent
有人能解释一下 (i+3>NF?"\n":FS) 这部分吗?@Kent - Fırat Uyulur
@Kent 如果我们打印最后一项(i + 3 大于字段数),则打印一个换行符。否则,打印一个逗号(字段分隔符)。NF 是字段数,FS 是字段分隔符。 - Gassa

7
它表现得像这样,因为默认情况下将字段按空格分割。您需要告诉它使用逗号进行分割,这可以使用FS变量或-F开关完成。除此之外,第一个字段是编号一。零是整行,因此还要更改for循环的初始值:
awk -F',' '{ for (i=1;i<=NF;i+=3) print $i }' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接