我有
200 34 323 160
0.3 0.6 0.5 0.2
0.4 0.9 0.7 0.9
和需要
34 160 200 323
0.6 0.2 0.3 0.5
0.9 0.9 0.4 0.7
……按第一行中的值排序的列。在猛击或惊吓中。听起来很简单但是..
最佳答案
awk 'NR==1 {for (i=1; i<=NF; i++) {print $i " " i} }' inputfilename >headers.txt
sort -k1,1n headers.txt >headerssort.txt
awk 'NR==FNR {a[NR]=$2} NR!=FNR {for (i=1; i<NF; i++) {printf $a[i] " "}; print $a[NF]}' headerssort.txt inputfilename >outputfilename
实际上,您要做的是创建临时文件
headers.txt
,该文件将输入文件(inputfilename
)的第一行中的所有值打印在单独的行上,再加上该值(列号)在输入文件中的位置。然后根据该值对该文件进行排序(当然仍保留原始列号),并获得headerssort.txt
文件。最后,使用这个排序文件以正确的顺序打印列,得到所需的文件(outputfilename
)。关于linux - 根据bash或awk中一行的值对列重新排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27516301/