同様の回答を検索しましたが、部分一致の問題を解決した回答はありません。スキーマファイルはfile2で、削除する行はfile1.csvにあります。これは、ここに示されているよりも多くの列を含むかなり大きなファイルです。
file1.csv には次のフィールドがあります。
修正する:
Linking page,Last crawled
https://start.me/discover/be/entertainment/betting?locale=ro,"Nov 17, 2018"
https://imgcop.com/img/Bwin-Mobile-App-77898390/,"Nov 17, 2018"
https://start.me/site/unibet.be?locale=fr,"Nov 17, 2018"
https://poker.partypoker402.com/en/blog/matt-savage-talks-wpt500.html,"Nov 17, 2018"
ファイル 2 には以下が含まれます。
https://roulette2.tk
paradisebingo.t
paradisebingo.tm
free-bwin.ro
sb288.co
OUTPUT
Linking page,Last crawled
Linking page,Last crawled
Linking page,Last crawled
Linking page,Last crawled
Linking page,Last crawled
https://start.me/discover/be/entertainment/betting?locale=ro,"Nov 17, 2018"
https://start.me/discover/be/entertainment/betting?locale=ro,"Nov 17, 2018"
https://start.me/discover/be/entertainment/betting?locale=ro,"Nov 17, 2018"
https://start.me/discover/be/entertainment/betting?locale=ro,"Nov 17, 2018"
https://start.me/discover/be/entertainment/betting?locale=ro,"Nov 17, 2018"
etc....
出力が繰り返されます。何が間違っているのかよくわかりません。
awk 'FNR == NR{ neg[$1]; next } { for ( i in neg ) if ( $1 !~ i) print }' file2.txt FPAT='([^,]*)|("[^"]+")' file1.csv > out.csv
しかし、正しく動作しませんでした。奇妙な理由でgrepが失敗します。
grep -vwF -f file2 file1.csv > output.csv
ベストアンサー1
あなたがしたことは良い試みのように見えますが、正規表現のマッチング句は望む方法で動作しません。では、検索したい値が$2 !~ neg[$1]
2番目のファイルから検索されます。file1
neg['156398439']
$1
いいえ最初。したがって、あなたの状態は決して一致しません。
file1
繰り返しでは、作業セクション内で正規表現比較を実行するためにこのような操作を実行できます。
awk 'FNR == NR { neg[$1]; next }{ for ( i in neg ) if ( $2 !~ i) print }' file2 FS="," file1
FS
また、このような複雑な正規表現を使用してCSVファイルの制限を解除することはできないようですFS
。フィールドを定義するのではなく、分割する制限解除子を定義することを忘れないでください。フィールドがどのように見えるかを説明する表現があるようです。 GNUは、awk
他の変数がFPAT
これらの正規表現を定義できるようにします。
あなたはそれを使用することができます
awk 'FNR == NR { neg[$1]; next }{ for ( i in neg ) if ( $2 !~ i) print }' file2 FPAT='([^,]*)|("[^"]+")' file1