使用awk将列转置为行

时间:2018-09-18 10:26:14

标签: awk

在我的数据文件中,有一个我感兴趣的列。因此,我使用awk仅打印了该列(awk'{print $ 4}'),并设置了使用“ if”消除的条件。但是,我无法弄清楚如何将该列的第n行转置为新行。

输入:

1
2
3
4
5
6
7
8
9

所需的输出:

1  4  7
2  5  8
3  6  9

我已经检查了其他解决方案并尝试过,但是没有一个给我我想要的。如果有人可以帮助我,我将不胜感激。

3 个答案:

答案 0 :(得分:4)

您还可以在此处使用pr

$ seq 9 | pr -3ts' '
1 4 7
2 5 8
3 6 9
$ seq 9 | pr -5ts' '
1 3 5 7 9
2 4 6 8

其中的数字表示您需要多少列,而s选项允许指定列之间的分隔符

答案 1 :(得分:1)

使用awk:

$ seq 9 | 
awk ' {
    i=((i=NR%3)?i:3)                # index to hash a
    a[i]=a[i] (a[i]==""?"":" ") $1  # space separate items to a[i]
} 
END {
    for(i=1;i<=3;i++)               # from 1 to 3 (yes, hardcoded)
        print a[i]                  # output
}'

输出:

1 4 7
2 5 8
3 6 9

答案 2 :(得分:1)

autogen软件包中的columns程序可以执行此操作,例如:

seq 9 | columns --by-column -w1 -c3

输出:

1 4 7
2 5 8
3 6 9