AWK:根据列数据对行进行排序

时间:2021-02-09 19:57:43

标签: macos sorting awk

我正在处理由 > 1000 个 txt 填充生成的 CSV 文件,使用以下 AWK 脚本从每个文件中获取其名称和第 5 列中的值:

 awk -F', *' 'FNR==2 {f=FILENAME; 
                     sub(/.*\//,"",f);
                     sub(/_.*/ ,"",f);
                     printf("%s: %s\n", f, $5) }' "${tmp}"/*.txt >> ${home}/output.csv

这是 output.CSV 文件的一部分,根据 lig 的数量,它总共包含 1020 行,我需要根据它对这些数据进行排序:

 lig1000: -7.5800
    lig1001: -4.8400
    lig1002: -7.7200
    lig1003: -4.8400
    lig1004: -7.9800
    lig1005: -7.5200
    lig1006: -6.0700
    lig1007: -7.3100
    lig1008: -7.7200
    lig1009: -7.3700
    lig100: -5.1400
    lig1010: -4.6600
    lig1011: -8.1500
    lig1012: -7.6100
    lig1013: -7.0200
    lig1014: -7.4100
    lig1015: -5.8700
    lig1016: -6.8400
    lig1017: -5.5300
    lig1018: -5.4100
    lig1019: -6.6900
    lig101: -6.2700
    lig1020: -6.2600
    lig1021: -4.0000
    lig1022: -5.9200
    lig1023: -8.0200
    lig1024: -7.5800
    lig1025: -4.2100
    lig1027: -7.0500
    lig1028: -6.1700
    lig1029: -4.9700
    lig997: -6.7000
    lig998: -9.1800
    lig999: -7.3000
    lig99: -5.2700
    lig9: -6.1400

问题出在 linnes 的顺序中,我想在 AWK 过程中自动从 lig1 排序到 lig1021(最后一个)。我试图将 AWK 表达式通过管道传输到 | LC_ALL=C sort -t':' -k1,1g 它通常适用于我的 mac osx,但它产生了相同的顺序。我如何修改我的排序命令? 谢谢!

1 个答案:

答案 0 :(得分:1)

我建议将输出通过管道传输到 sort

awk '...' input.csv | sort -k1.4,1n

-k KEYDEF 用于定义排序键:

<块引用>

KEYDEF 是 F[.C][OPTS][,F[.C][OPTS]] 开始和停止位置,其中 F 是字段编号,C 是字符位置 领域的重任;都是原点1,停止位置默认为行尾。

这意味着:-k1.4,1n 将根据第一个字段执行数字排序,从该字段的第 4 个字符开始

相关问题