最初の列の名前に基づいてファイルを並べ替える必要があります。一部の名前は疑問符で終わります。sort
ソート中は常にこの疑問符を無視してください。
sort -k 1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a?,1
a,2
b,1
b?,2
sort
こうすることで、疑問符をどのように配置するかはあまり気にしません。着実に。しかし、これは事実ではなく、2番目の列が代わりに考慮されるようです。でもsort
最初の列のみをキーとして使用するように明示的に指示する場合。
バージョン情報:
$ sort --version
sort (GNU coreutils) 8.22
Packaged by Gentoo (8.22 (p1.0))
ちなみに、sort
上記はOS X 10.9(「sort(GNU coreutils)5.93」と識別されています)で期待どおりに機能します。
答え1
を使用すると、LC_ALL=C
ソート8.21で正しい結果が得られるようです。
$ LC_ALL=C sort -k1,1 -t , sample.txt
a,2
a?,1
b,1
b?,2
またはあなたが書いたように:
$ cat | LC_ALL=C sort -k1,1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a,2
a?,1
b,1
b?,2
ところで、あなたは必要ありませんcat
:
$ LC_ALL=C sort -k1,1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a,2
a?,1
b,1
b?,2
LC_COLLATE=C
私にも効果があります。
sort -k1
vsの使用についてsort -k1,1
上記の例では、すべて変更されたバージョンのコマンドを代わりにsort
使用しています。なぜなら、他の特殊文字(例えば。-k1,1
-k 1
%
のみ使用-k1
:
$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1
a
a%,foo
a,bar
そして-k1,1
:
$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1,1
a
a,bar
a%,foo