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
予想通りです(出力から削除されます)h30
。h40
$ 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 ライン終端が問題であることを証明します。