私は2つのプレーンデータファイルの共通部分を見つけようとしていて、以前の投稿からそれを行うことができることがわかりました
comm -12 <(sort test1.list) < (sort test2.list)
それは私には思われる sort test1.list
はtest1.listを順番にソートすることを目的としています。 sort
の仕組みを理解するために、次のファイルtest_.listに対してsort
をsort test1.list > test2.list
100
-200
300
2
92
15
340
ただし、test2.listは
100
15
2
-200
300
340
92
この並べ替えられたリストは、この並べ替えがどのように機能するか、また並べ替えと通信がどのように連携するかについて、私をかなり混乱させます。
comm
マニュアルによれば、「 `comm 'を使用する前に、` LC_COLLATE'ロケールで指定された照合シーケンスを使用して入力ファイルをソートする必要があります。」
そしてsort
マニュアル:「特に指定されない限り、すべての比較は `LC_COLLATE 'ロケールで指定された文字照合シーケンスを使用します。
したがって、簡単なテストで確認すると、LC_COLLATE
順序comm
が期待するのは、sort
のデフォルトの順序である辞書ソートです。
sort
は、さまざまな方法でファイルをソートできます。
-d
:辞書順-空白と英数字以外は無視されます。-g
:一般的な数値-アルファベット、負の数、正の数。-h
:人間が読める-否定、アルファ、肯定。 n < nk = nK < nM < nG
-n
:数値-負、アルファ、正。 k
、M
、G
などは特別ではありません。-V
:バージョン-正、上限、下、負。 1 < 1.2 < 1.10
-f
: 大文字小文字を区別しません。-R
:ランダム-入力をシャッフルします。-r
:逆-通常、dghnV
のいずれかと一緒に使用されますもちろん他のオプションもありますが、これらはあなたが見たり必要とする可能性が高いものです。
テストの結果、デフォルトのソート順はおそらく-d
、辞書順。
d | g | h | n | V
------+-------+-------+-------+-------
1 | a | -1G | -10 | 1
-1 | A | -1k | -5 | 1G
10 | z | -10 | -1 | 1g
-10 | Z | -5 | -1g | 1k
1.10| -10 | -1 | -1G | 1.2
1.2 | -5 | -1g | -1k | 1.10
1g | -1 | a | a | 5
1G | -1g | A | A | 10
-1g | -1G | z | z | A
-1G | -1k | Z | Z | Z
1k | 1 | 1 | 1 | a
-1k | 1g | 1g | 1g | z
5 | 1G | 1.10 | 1G | -1
-5 | 1k | 1.2 | 1k | -1G
a | 1.10 | 5 | 1.10 | -1g
A | 1.2 | 10 | 1.2 | -1k
z | 5 | 1k | 5 | -5
Z | 10 | 1G | 10 | -10
Kevinの包括的で例示的な答えを具体化するためだけに:大文字小文字を区別しないフラグを付けてcomm
を実行すると、comm -i
、大文字と小文字を区別せずに並べ替える必要もあります。例:sort -f
。
完全な例:
comm -i <(sort -i test1.list) <(sort -i test2.list)
それ以外の場合は、ネイティブsort
(フラグなし)が機能します。
並べ替えにはsort -n filename
を使用して並べ替えを行い、comm
コマンドを使用できます。