Awk 从另一个文件中删除字符串匹配项
我有1.txt:Awk 从另一个文件中删除字符串匹配项,awk,sed,grep,Awk,Sed,Grep,我有1.txt: hi aa my name is bb tom how are you cc today 我有2.txt(我不想要的单词) 我的预期产出是 hi my name is tom how are you today 到目前为止,我所尝试的是 sed -e "s/$(sed 's:/:\\/:g' 2.txt)/ /" or grep -Fvf 2.txt 1.txt 我有100多个我不想要的单词,所以我必须用一句话来表达,谢谢 awk 'NR==FNR{ a[$0]; ne
hi aa my name is bb tom
how are you cc today
我有2.txt(我不想要的单词)
我的预期产出是
hi my name is tom
how are you today
到目前为止,我所尝试的是
sed -e "s/$(sed 's:/:\\/:g' 2.txt)/ /"
or
grep -Fvf 2.txt 1.txt
我有100多个我不想要的单词,所以我必须用一句话来表达,谢谢
awk 'NR==FNR{ a[$0]; next }{ for(i in a) gsub("\\<"i"\\> *","",$0) }1' 2.txt 1.txt
-累积每个句子中应该删除的单词a[$0]
-用空字符串替换每个“不需要的”字(作为一个完整的字)gsub(“\\*”,“”,$0)
- 不规范化空格
$ sed -f <(sed 's/.*/s_\\b&\\b__g/' remove_list) file
hi my name is tom
how are you today
aardwark
$sed-f如果1.txt
包含单词“aardvark”,您希望在输出中看到“rdvark”吗?或者,你只想考虑整字匹配吗?是的,我很想保存食蚁兽,所以我想我会把我的2.TXT编辑成一个标准格式,比如“AA”。有没有想过把它们全部删除?谢谢像“aa”
这样的格式的问题是它不匹配以“aa”
开头或以“aa”
结尾的行。是的,这是一个大问题,但就我所能想到的,有什么帮助吗?定义一个“单词”。例如,有一个词,还是那两个词?如果有出现在1.txt中,而有出现在2.txt中,那么输出是的(即从字符串有中删除)还是其他内容?这两个文件中除了空格分隔的字母串之外还有其他内容吗?嗨,我两个都试过了,但输出结果与1.txt一样。我在使用mac,这是个问题吗?是的,我经常使用sed,但很多时候不同的系统使用不同的标志,我还在学习。你能告诉我你使用什么样的系统吗?这是GNU-sed,单词边界的\b
应该是标准的,据我所知,不使用任何扩展。Mac OS-sed由于某种原因不喜欢\b
。但这似乎有效:sed-f hi-jas,它有效。任何一个网站你能推荐我去掌握它吗?如果删除的单词在行尾会留下一个空格。也许不重要。我可以知道你用的是什么样的系统吗?我正在使用mac。它会带来不同吗?@RobertChoy,运行brew install gawk
,然后应用我的方法
hi my name is tom
how are you today
$ sed -f <(sed 's/.*/s_\\b&\\b__g/' remove_list) file
hi my name is tom
how are you today
aardwark
$ sed -f <(sed 's/.*/s_ &\\b__g;s_\\b& __g;s_\\b&\\b__g/' remove) file