コマンドを誤った順序で並べ替える

コマンドを誤った順序で並べ替える

sortコマンドを使用して「|」(パイプ文字)で区切られたデータを処理する方法は?

2つのフィールドを持つ「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

終了フィールド番号がない場合は、-k1 から始まるすべてのフィールドを考慮します。あなたが必要とする:

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

関連情報