Macos AWK:基于列数据的排序行

Macos AWK:基于列数据的排序行,macos,sorting,awk,Macos,Sorting,Awk,我正在处理由>1000个txt填充生成的CSV文件,使用以下AWK脚本从每个文件中提取其名称和第5列中的值: awk -F', *' 'FNR==2 {f=FILENAME; sub(/.*\//,"",f); sub(/_.*/ ,"",f); printf("%s: %s\n", f, $5) }' &q

我正在处理由>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排序-t':'-k1,1g
它通常在我的MacOSX上工作,但产生了相同的订单。如何修改排序命令?
谢谢

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

awk '...' input.csv | sort -k1.4,1n
-k KEYDEF
用于定义排序键:

KEYDEF是F[.C][OPTS][,F[.C][OPTS]]表示开始和停止位置,其中F是字段编号,C是字符位置—— 实地调查;两者都是原点1,停止位置默认为直线的端点


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

它在macos上有效吗?我听说排序是针对linux的。
sort
的这种行为是在POSIX中定义的,因此它应该在macos上工作。不过我还没试过。()所以LC_ALL=C排序-k1.4,1n或排序-k1.4,1n?:-)
LC_ALL
只是稍微相关。这取决于默认区域设置是否会导致不同的结果。我想说这是不需要的,因为您在这里执行数字排序。但谁知道呢,试试看!:)如果您的排序支持,这通常是通过版本sort,
sort-V
完成的。不确定macOS??