GREP - ファイルのパターン一致は、リストの最後のパターンのみを返します。

GREP - ファイルのパターン一致は、リストの最後のパターンのみを返します。

1行にハッシュ1つずつ、テキストファイルに約2,300万のハッシュリストがあります。 hashes.txtと呼んでください。別のテキストファイル(app 40)にハッシュリストがあり、もう1行にハッシュが1つずつあります。名前をculls.txtとして指定してください。

私はculls.txtのパターンを使って逆grepを実行しようとしています。つまり、cullsリストのどのパターンとも一致しないすべての行を出力したいと思います。

grep -v -F -f culls.txt hashes.txt > Output.txt

何が起こっているのかは、40個ほどのリストのうち最後のハッシュだけが削除されているということです。前の行のすべてのハッシュが保持されます。私は非常にブロックされました。提案?そしてそうです。値はハッシュファイルにあります;->

ベストアンサー1

最後のハッシュだけが認識されるという事実は、最後の行を除くすべての行に行末の問題があることを示します。

次のファイルを使用して、私のシステム(Ubuntu 14.04; grep(GNU grep)2.16)でこれをテストしました。

$ cat culls.txt 
h00
h10
h20
h30
h40
$ cat culls2.txt 
h00
h10
h20
h30
h40
$ cat hashes.txt 
h04
h11
h13
h30
h61
h40
h41
h39
h42
$ file culls.txt hashes.txt  culls2.txt
culls.txt:  ASCII text
hashes.txt: ASCII text
culls2.txt: ASCII text, with CRLF line terminators

私が得た出力はculls.txt予想通りです(出力から削除されます)h30h40

$ grep -v -F -f culls.txt hashes.txt
h04
h11
h13
h61
h41
h39
h42

私が得る出力はculls2.txtあなたが見るものと似ています(h40出力から削除されましたが、h30まだ残っています)。

$ grep -v -F -f culls2.txt hashes.txt
h04
h11
h13
h30
h61
h41
h39
h42

の最後の行には行末がありませんculls2.txt

最後の行にCRLF行終端を追加すると、次のような結果が得られます。

$ grep -v -F -f culls3.txt hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42

これで、出力からハッシュは削除されません。

これは、CRLF ライン終端が問題であることを証明します。

おすすめ記事