
私は2つの純粋なデータファイルの交差点を見つけようとしており、以前の投稿でこれを行うことができることを発見しました。
comm -12 <(sort test1.list) < (sort test2.list)
sort test1.list
test1.listを順番に並べることが目的のようです。sort
動作を理解するために、sort
次のファイルtest1.listを次のように試しました。sort test1.list > test2.list
100
-200
300
2
92
15
340
しかしtest2.listは
100
15
2
-200
300
340
92
このように並べ替えられたリストは、ソートがどのように機能するか、ソートと通信がどのように連携するかについて非常に混乱します。
答え1
comm
マニュアルによると、「comm」を使用する前に、「LC_COLLATE」ロケールで指定された組み合わせ順序を使用して入力ファイルをソートする必要があります。
そしてsort
マニュアル:「別段の言及がない限り、すべての比較は 'LC_COLLATE'ロケールで指定された文字の組み合わせ順序を使用します。
そこで、クイックテストにより、予想LC_COLLATE
順序が基本順序(辞書ソート)によって提供されることcomm
が確認されました。sort
sort
ファイルはさまざまな方法でソートできます。
-d
:辞書順 - スペースと英数字を除くすべての文字を無視します。-g
:一般数字 - 文字、負の数、正の数。-h
:人が読める - 負、アルファ、プラス。n < nk = nK < nM < nG
-n
:Number - 負数、アルファ、正数です。k
、などM
はG
特別ではありません。-V
:バージョン - 正、大文字、小文字、負の数。1 < 1.2 < 1.10
-f
:大文字と小文字を区別しません。-R
: Random - 入力をランダムに再生します。-r
:reverse - 通常、次のいずれかで使用されます。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
答え2
Kevinの包括的で例示的な答えを具体化するには:大文字と小文字をcomm
区別しないフラグを使用して実行する場合は、大文字と小文字を区別せずに並べ替える必要がありますcomm -i
(例:)sort -f
。
完全な例:
comm -i <(sort -i test1.list) <(sort -i test2.list)
それ以外の場合は、デフォルトsort
(フラグなし)が機能します。
答え3
sort -n filename
そのコマンドを使用してソートおよびソートに使用できますcomm
。