我正在寻找一种方法来选择数据文件的列(例如第8列)并将该列的前五个数字写入一行,接下来的五个数字写入第二行,依此类推。
我一直在使用awk
和printf
进行测试但没有成功。
答案 0 :(得分:3)
执行此操作的awk
方法是使用OFS
和ORS
切换以使用模数函数分隔输出:
$ 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 % 10
。seq
命令只会生成用于演示的单列数字,从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行时可以更改。