gpt4 book ai didi

linux - 根据 bash 或 awk 中一行中的值对列重新排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:11 26 4
gpt4 key购买 nike

我有

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

.. 列按第一行中的值排序。在 bash 或 awk 中。听起来很简单但是..

最佳答案

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com