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"