2つのファイルがあります。
find
ファイルを一覧表示し、数字で並べ替え、ファイルに書き込むためにフォルダ内のコマンドを使用して生成されたファイル。- もう1つはPythonスクリプトによって生成され、ソートされていないため、明示的に数字でソートしました。
問題は、私のsort
出力に次の2つの列しかないことです。
500016
500016
500174
500174
500277
500277
ご覧のとおり、共通項目も 2 列に単独で表示され、3 番目の列は完全に欠落しています。つまり、2つのファイル間に共通点はありませんが、最初の3つの項目は実際には同じです。sort
それ以外の場合は期待どおりに動作します。そして私が作成したテストファイルもあります。
私はcomm
両方のファイルをアルファベット順にソートする必要があることを知っています。以下は私が試したが失敗したオプションのリストです。
comm <(sort file1.txt) <(sort file2.txt)
~からhttps://unix.stackexchange.com/a/377689/187419失敗。また、明示的に-d
オプションを提供しようとしましたが、sort
事前ソートを使用してファイルを明示的に書き換えてみましたが、どちらも機能しませんでした。
comm --check-order <(sort file1.txt) <(sort file2.txt)
~からhttps://unix.stackexchange.com/a/186101/187419注文エラーは返されません。通常どおり実行され、2つの出力列が提供されます。
このソリューション私と非常に近い問題にも当てはまりません。
ファイルにいくつかの追加の文字があるためかもしれないと思い、解決策も言及しました。ここ:set list
vimでやってください。
問題が発生したかどうかをテストするために、sort
私が作成したテストファイル(以前に使用したファイル)を具体的に数字で並べ替えましたが、comm
まだcomm
機能しました。
見つけることができるすべてのソリューションを試しましたが、成功しませんでした。他に提案がありますか?
ベストアンサー1
あなたの言葉はほぼ正しいです。各行に追加の文字があると、その行が正確に一致しなくなります。これらの追加文字は、キャリッジリターン、空白、または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)