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/|$//'