dot*_*hen 16 linux command-line text-processing
我有一个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"
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,toremove.txt我有一个用户 ID 列表:
30923833
77392318
Run Code Online (Sandbox Code Playgroud)
有没有一种聪明、有效的方法来从users.csv文件中删除包含 ID 的所有行toremove.txt?我编写了一个简单的 Python 应用程序来解析这两个文件,并只将那些在toremove.txt. 也许一些sed或awk魔法可以帮助这里?
考虑到上述示例,这是预期的结果:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
Run Code Online (Sandbox Code Playgroud)
cuo*_*glm 17
使用grep,您可以执行以下操作:
$ grep -vwF -f toremove.txt users.txt
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
Run Code Online (Sandbox Code Playgroud)
与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"
Run Code Online (Sandbox Code Playgroud)