1

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

我一直在测试成功awkprintf失败。

4

2 回答 2

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

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


我还发现 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.

于 2013-09-09T16:14:15.790 回答
0

这也将产生请求的格式

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

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

于 2013-09-09T19:41:53.300 回答