排序命令顺序错误

Luc*_*ano 3 sort locale

如何让排序命令处理以“|”分隔的数据 (管道字符) ?

考虑这个名为“x”的示例文件,它有两个字段:

axis-AXIS|OK
axis-AXISR|OK
axis-AXISD2X|OK
axis-AXISA|OK
axis-AXISD1|OK
axis-AXIS1RX|OK
axis-AXISR1M|OK
axis-AXISD2|FALSE
axis-AXISMD|FALSE
axis-AXISM|FALSE
axis-AXISE|OK
axis-AXISD|OK
Run Code Online (Sandbox Code Playgroud)

我的语言环境:

echo $LC_ALL
C
Run Code Online (Sandbox Code Playgroud)

排序时字符“|” 似乎是产生奇怪分类的关键的一部分:

sort -t"|" x

axis-AXIS1RX|OK
axis-AXISA|OK
axis-AXISD1|OK
axis-AXISD2X|OK
axis-AXISD2|FALSE
axis-AXISD|OK
axis-AXISE|OK
axis-AXISMD|FALSE
axis-AXISM|FALSE
axis-AXISR1M|OK
axis-AXISR|OK
axis-AXIS|OK
Run Code Online (Sandbox Code Playgroud)

指定字段键sort -t"|" -k1 x没有任何变化。

hee*_*ayl 5

如果没有结束字段编号-k,它将考虑从 1 开始的所有字段。您需要:

sort -k1,1 -t'|' file.txt
Run Code Online (Sandbox Code Playgroud)

测试 :

$ sort -k1,1 -t'|' file.txt 
axis-AXIS|OK
axis-AXIS1RX|OK
axis-AXISA|OK
axis-AXISD|OK
axis-AXISD1|OK
axis-AXISD2|FALSE
axis-AXISD2X|OK
axis-AXISE|OK
axis-AXISM|FALSE
axis-AXISMD|FALSE
axis-AXISR|OK
axis-AXISR1M|OK
Run Code Online (Sandbox Code Playgroud)

如果locale不是C,您可以即时设置:

LC_ALL=C sort -k1,1 -t'|' file.txt
Run Code Online (Sandbox Code Playgroud)