GNUソートを使用してファイル内の複数の列をソートしようとしています。
ソースファイルtmp/file.txtの形式は次のとおりです。
03A12345679 2014-09-30-00.00.01.00
- "03" => 最初の列
- "A" => フィールド区切り記号
- "12345679" => 2番目の列
- "2014-09-30-00.00.01.00" => その他の列(ソートされていない)
私は次のコマンドを試しました。
sort --field-separator="A" -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt
そして:
--field-separator="A"
=> フィールド区切り記号は「A」です。-k2,11
=> 2番目の列は最初のソートです(「12345679」)。-k1,2
=>最初の列は2番目のソート( "03")です。
ただし、結果が誤ってソートされました(「03」は「01」行と「02」行の前にあります)。
03A12345679 2014-09-30-00.00.01.000000-0000
01A12345679 12345679 132132155VDVLDLV
02A12345679 FONDSEURO 000012664,120000000M
02A12345679 FR09999956570000009999,999990000F
01A12345680 472958519598601200000000047295824
02A12345680 122121EUR 0000099999,370000000M
私は次の結果が欲しい:
01A12345679 12345679 132132155VDVLDLV
02A12345679 FONDSEURO 000012664,120000000M
02A12345679 FR09999956570000009999,999990000F
03A12345679 2014-09-30-00.00.01.000000-0000
01A12345680 472958519598601200000000047295824
02A12345680 122121EUR 0000099999,370000000M
どうすればいいですか?
答え1
フィールド位置とキャラクター位置を混同していたようです。 GNUソートを使用すると、スペースでA
区切られた最初のフィールドで一連の文字をソートできます。
$ sort -k1.4,1.11 -k1.1,1.2 file
01A12345679 12345679 132132155VDVLDLV
02A12345679 FONDSEURO 000012664,120000000M
02A12345679 FR09999956570000009999,999990000F
03A12345679 2014-09-30-00.00.01.000000-0000
01A12345680 472958519598601200000000047295824
02A12345680 122121EUR 0000099999,370000000M
答え2
以下を使用して並べ替え-g
(標準数値比較基準):
sort --field-separator="A" -g -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt