从列的每5个元素中打印一行

时间:2013-09-09 16:11:27

标签: awk printf

我正在寻找一种方法来选择数据文件的列(例如第8列)并将该列的前五个数字写入一行,接下来的五个数字写入第二行,依此类推。

我一直在使用awkprintf进行测试但没有成功。

2 个答案:

答案 0 :(得分:3)

执行此操作的awk方法是使用OFSORS切换以使用模数函数分隔输出:

$ seq 1 20 | awk '{printf "%s", $1 (NR % 5 ? OFS : ORS)}'
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

例如,对于第八列,将$1更改为$8,对于10行而不是5,将NR % 5更改为NR % 10seq命令只会生成用于演示的单列数字,从1到20。


我还发现使用xargs对此类事情很有用:

$ seq 1 20 | awk '{print $1}' | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

示例不需要awk,因为seq只会生成一个列,但是对于您的问题更改$1$8,只能从中选择第八列你的意见。使用此方法,您还可以使用awk切换cut

答案 1 :(得分:0)

这也会产生所要求的格式

seq 1 20 | awk '{printf("%s ", $1); if (NR % 5 == 0) printf("\n")}'

其中$ 1表示de列号,在将存档传递给awk行时可以更改。

相关问题