ファイルBの文字列を含むファイルAのすべての行を削除します。

ファイルBの文字列を含むファイルAのすべての行を削除します。

users.csvユーザー名、ユーザーID、およびその他のデータのリストを含むCSVファイルがあります。

username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"Paul McCartny", 30923833, "left", "black"
"Ringo Starr", 77392318, "right", "blue"
"George Harrison", 72349482, "left", "green"

他のファイルにはtoremove.txtユーザーIDのリストがあります。

30923833
77392318

users.csvファイルからIDを含むすべての行を削除するスマートで効率的な方法はありますかtoremove.txt?私はこれらの2つのファイルを解析し、新しいファイルにない行だけを書く単純なPythonアプリケーションを書いたが、toremove.txt非常に遅い。たぶんsed魔法はawkここに役立つでしょうか?

上記の例を考慮すると、望ましい結果は次のとおりです。

username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"

ベストアンサー1

を使用すると、grep次のことができます。

$ grep -vwF -f toremove.txt users.txt 
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"

そしてawk

$ awk -F'[ ,]' 'FNR==NR{a[$1];next} !($4 in a)' toremove.txt users.txt 
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"

おすすめ記事