ファイルを並べ替えようとしています。
TX001;A0004|Number|5|0|Y|1
TX001;A0110|VARCHAR|5|0|Y|4
TX001;A1332|VARCHAR|15|0|Y|3
TX001;B3321|VARCHAR|15|0|Y|5
TX001;C1321|VARCHAR|15|0|Y|2
TY001;A1234|Number|5|0|Y|3
TY001;C2335|VARCHAR|5|0|Y|1
TY001;B2133|VARCHAR|15|0|Y|2
TZ001;A1234|Number|5|0|Y|3
TZ001;A2133|VARCHAR|5|0|Y|1
TZ001;C0133|VARCHAR|15|0|Y|2
予想される出力は次のとおりです。
TX001;A0004|Number|5|0|Y|1
TX001;C1321|VARCHAR|15|0|Y|2
TX001;A1332|VARCHAR|15|0|Y|3
TX001;A0110|VARCHAR|5|0|Y|4
TX001;B3321|VARCHAR|15|0|Y|5
TY001;C2335|VARCHAR|5|0|Y|1
TY001;B2133|VARCHAR|15|0|Y|2
TY001;A1234|Number|5|0|Y|3
TZ001;A2133|VARCHAR|5|0|Y|1
TZ001;C0133|VARCHAR|15|0|Y|2
TZ001;A1234|Number|5|0|Y|3
最後の数値列に基づいてソートする必要があります。 sort を使用しようとすると、-n
最初の列の順序が変更されます。
を試しましたが、sort -t "|" -k 6,6n FNAM.txt
数値のソートのため、最初の列の順序が変更されました。
テーブル名の最初の列は、影響を受けずに最後の列に基づいて数値順にソートする必要があります。
答え1
答え2
sort
さまざまな種類の列を並べ替えることは可能ですが、区切り文字は単一文字でなければなりません。例を処理し、予想される出力を生成するには、最初の ';' を '|' に置き換えて、最初の列を数値順に並べ替えてから(前の 6 番目の列)、最後に最初の '|' ';':
sed 's/;/|/' < FNAM.txt | sort -t\| -k1,1 -k7,7n | sed 's/|/;/'
試したバリエーション、
sort -t "|" -k 6,6n FNAM.txt
ファイル全体を 6 番目の列でのみ数値でソートします。sort
ユーザーが未知の構造を知らないため、最初の数文字で行をグループ化する必要があることに気づいていません。したがって、最後の列が完全にソートされ、結果としてテーブル名が混在します。