他のファイルで見つかった行に基づいてファイルから行を削除する

他のファイルで見つかった行に基づいてファイルから行を削除する

file1.txt ファイルには次の行が含まれています。

/api/purchase/<hash>/index.html

たとえば、

/api/purchase/12ab09f46/index.html

file2.csv ファイルには次の行が含まれています。

<hash>,timestamp,ip_address

たとえば、

12ab09f46,20150812235200,22.231.113.64 
a77b3ff22,20150812235959,194.66.82.11

file2.csvをフィルタリングし、file1.txtからハッシュ値も存在するすべての行を削除したいと思います。言い換えれば:

cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv

またはそのようなもの。

簡単なはずですが、うまく機能しないようです。

誰もがこのタスクに対して機能するパイプラインを提供できますか?

ベストアンサー1

cut -d / -f 4 file1.txt | paste -sd '|' | xargs -I{} grep -v -E {} file2.csv

説明する:

cut -d / -f 4 file1.txtハッシュ値は最初のファイルから選択されます。

paste -sd '|'すべてのハッシュ値を正規表現に連結します。H1|H2|H3

xargs -I{} grep -v -E {} file2.csv{}grepは前のパターンを引数として使用され、xargsは次のように置き換えられます。STDIN

ない場合は、paste代替品に置き換えてください。tr "\\n" "|" | sed 's/|$//'

おすすめ記事