如何使用排序命令处理以“|”分隔的数据(管道字符)?
考虑这个名为“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
我的区域设置:
echo $LC_ALL
C
当它被排序时,字符“|”似乎是产生奇怪分类的关键的一部分:
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
指定字段键sort -t"|" -k1 x
没有任何变化。
答案1
如果没有结束字段编号-k
,它将考虑从 1 开始的所有字段。您需要:
sort -k1,1 -t'|' file.txt
测试 :
$ 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
如果您locale
不是C
,您可以即时设置:
LC_ALL=C sort -k1,1 -t'|' file.txt