最初のファイルの特定の列と部分的に一致する可能性がある他のファイルのパターンに基づいてファイルから行を削除します。

最初のファイルの特定の列と部分的に一致する可能性がある他のファイルのパターンに基づいてファイルから行を削除します。

同様の回答を検索しましたが、部分一致の問題を解決した回答はありません。スキーマファイルは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番目のファイルから検索されます。file1neg['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

おすすめ記事