我正在寻找一种方法来选择数据文件的一列(例如第八列),并在一行中写入该列的前五个数字,在第二行中写入接下来的五个数字,依此类推。
我一直在测试成功awk
和printf
失败。
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
例如,将第 8 列更改$1
为10 行而不是 5 行。该命令仅生成用于演示的从 1 到 20 的单列数字。$8
NR % 5
NR % 10
seq
我还发现 usingxargs
对这种事情很有用:
$ 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
.
这也将产生请求的格式
seq 1 20 | awk '{printf("%s ", $1); if (NR % 5 == 0) printf("\n")}'
其中 $1 表示在将存档传递到 awk 行时可以更改的列号。