如何对大量列进行重新排序?

gaf*_*ffa 5 sort columns

我正在寻找一种可管道化的单行代码来对大量列进行重新排序(其中手动输入列号,例如在诸如此类的awk命令中awk '{print $3,$2,$1}'是不可行的)。顺序可以通过排序方案给出(字母、数字 - 就像“排序”,但作用于列而不是行。)或者在文本文件中任意给出。

rus*_*ush 0

我不确定它是最好的解决方案,也不确定它能否在巨大的桌子上快速运行,但它应该可以:

echo -e  "2 1 3\n5 4 6\n8 7 9"  | \
awk '{for (i=1;i<=NF;i++) {a[NR,i]=$i} } \
     NF>p {p=NF} \
     END {for (j=1;j<=p;j++) {str=a[1,j]; \
     for (i=2;i<=NR;i++) {str=str" "a[i,j];}print str}}' \ 
     | sort -n  | \
awk '{for (i=1;i<=NF;i++) {a[NR,i]=$i} } \
     NF>p {p=NF} \
     END {for (j=1;j<=p;j++) {str=a[1,j]; \
     for (i=2;i<=NR;i++) {str=str" "a[i,j];}print str}}'
Run Code Online (Sandbox Code Playgroud)

它是如何工作的:它转置表格,然后对表格进行排序并将其转置回去。

顺便说一句echo -e "2 1 3\n5 4 6\n8 7 9"将导致

2 1 3
5 4 6
8 7 9
Run Code Online (Sandbox Code Playgroud)

脚本工作后,结果将是

1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

附:我认为可以在 awk 中对数组进行排序,不幸的是我没有足够的时间来做到这一点。