私は2つのファイルを持っています:
find
コマンドを使用して生成されたもので、ファイルを一覧表示し、数値で並べ替えてファイルに書き込みます。問題は、私のsort
出力に2つの列しかないことであり、次のとおりです。
500016
500016
500174
500174
500277
500277
ご覧のとおり、共通のエントリでさえ2つの列に別々に表示され、3番目の列が完全に欠落しています。これは、2つのファイルに共通するものがないことを意味しますが、これらの最初の3つのエントリは実際には同じです。 sort
それ以外の場合は、私が作成したいくつかのテストファイルで期待どおりに機能します。
comm
では2つのファイルを字句的にソートする必要があることを知っています。これは、私が試したが失敗したオプションのリストです。
comm <(sort file1.txt) <(sort file2.txt)
から https://unix.stackexchange.com/a/377689/187419 失敗しました。また、sort
に-d
オプションを明示的に指定してみました。また、辞書の並べ替えを使用してファイルを明示的に書き換えようとしました。どちらも機能しませんでした。
comm --check-order <(sort file1.txt) <(sort file2.txt)
from https://unix.stackexchange.com/a/186101/187419 注文エラーは返されませんでした。通常どおり実行され、2つの出力列が表示されました。
この解決策 私の非常に近い問題の場合も機能しません。
ファイル内のいくつかの追加文字が原因である可能性があると考えて、vimで:set list
を実行する ここ という解決策もあります。
sort
が問題を引き起こしているかどうかをテストするために、作成したテストファイル(以前はcomm
が機能していた)を意図的に数値で並べ替えましたが、comm
は引き続き機能しました。
私は見つけた解決策を試しましたが、役に立ちませんでした。他に何か提案はありますか?
各行に文字が追加されているために、対応する行が正確に一致しなくなっていることはほぼ間違いありません。これらの追加文字は、Windowsスタイルのラインターミネータからのキャリッジリターン文字、スペースまたはタブ文字、あるいはその他の非印刷文字の形式である可能性があります。たとえば、Pythonスクリプトは、数字の一部またはすべてに先頭のスペースが含まれるように数字を右揃えにする場合があります。
最も確実なことは、そのような不要な文字をすべて除外することです。データは厳密に数値であるため、たとえばsed
を使用すると非常に簡単に実行できます。
sed 's/[^0-9]//g' < input > output
プロセスのさまざまな時点でそれを挿入できます。これが1つだけです:
comm <(sed 's/[^0-9]//g' file1.txt | sort) <(sed 's/[^0-9]//g' file2.txt | sort)