在我的数据文件中,有一个我感兴趣的列。因此,我使用awk仅打印了该列(awk'{print $ 4}'),并设置了使用“ if”消除的条件。但是,我无法弄清楚如何将该列的第n行转置为新行。
输入:
1
2
3
4
5
6
7
8
9
所需的输出:
1 4 7
2 5 8
3 6 9
我已经检查了其他解决方案并尝试过,但是没有一个给我我想要的。如果有人可以帮助我,我将不胜感激。
答案 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