web-dev-qa-db-ja.com

並べ替えと通信の使用に関する問題

私は2つのプレーンデータファイルの共通部分を見つけようとしていて、以前の投稿からそれを行うことができることがわかりました

comm -12 <(sort test1.list) < (sort test2.list)

それは私には思われる sort test1.listはtest1.listを順番にソートすることを目的としています。 sortの仕組みを理解するために、次のファイルtest_.listに対してsortsort test1.list > test2.list

100
-200
300
2
92
15
340

ただし、test2.listは

100
15
2
-200
300
340
92

この並べ替えられたリストは、この並べ替えがどのように機能するか、また並べ替えと通信がどのように連携するかについて、私をかなり混乱させます。

5
user288609

commマニュアルによれば、「 `comm 'を使用する前に、` LC_COLLATE'ロケールで指定された照合シーケンスを使用して入力ファイルをソートする必要があります。」

そしてsortマニュアル:「特に指定されない限り、すべての比較は `LC_COLLATE 'ロケールで指定された文字照合シーケンスを使用します。

したがって、簡単なテストで確認すると、LC_COLLATE順序commが期待するのは、sortのデフォルトの順序である辞書ソートです。

sortは、さまざまな方法でファイルをソートできます。

  • -d:辞書順-空白と英数字以外は無視されます。
  • -g:一般的な数値-アルファベット、負の数、正の数。
  • -h:人間が読める-否定、アルファ、肯定。 n < nk = nK < nM < nG
  • -n:数値-負、アルファ、正。 kMGなどは特別ではありません。
  • -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
11
Kevin

Kevinの包括的で例示的な答えを具体化するためだけに:大文字小文字を区別しないフラグを付けてcommを実行すると、comm -i、大文字と小文字を区別せずに並べ替える必要もあります。例:sort -f

完全な例:

comm -i <(sort -i test1.list) <(sort -i test2.list)

それ以外の場合は、ネイティブsort(フラグなし)が機能します。

0
chbrown

並べ替えにはsort -n filenameを使用して並べ替えを行い、commコマンドを使用できます。

0
harish.venkat