【问题标题】:Delete line containing word from FileB if word found in FileA如果在 FileS 中找到单词,则从 File 中删除包含单词的行
【发布时间】:2014-04-20 19:14:55
【问题描述】:

FileA 包含单词,FileB 包含字符串。

如何使用 sed/grep/awk(最好)从 FileB 中删除包含在 FileA 中找到的单词的行?

示例文件 A:

Word asdf
Word qwer
Word zxcv

示例文件 B:

https://www.webaddress.com/point?a=asdf
http://www.webaddress.com/point?a=pert
https://www.webaddress.com/point?a=njil
http://www.webaddress.com/point?a=qwer
http://www.webaddress.com/point?a=zxcv

所以,FileB 应该改为:

http://www.webaddress.com/point?a=pert
https://www.webaddress.com/point?a=njil

速度在这里是一个问题,因为 FileA 和 FileB 都可能很大。如果需要,可以对 FileA 和 FileB 进行排序等。

【问题讨论】:

  • 你能去掉FileA中的前缀Word,让它只包含单词吗?
  • 很遗憾,这不是一个选项。

标签: string bash sed grep comparison


【解决方案1】:

你可以使用grep:

grep -v -f <(awk '{print $2}' FileA) FileB > tmp && mv tmp FileB

正如Glenn Jackman 所评论的那样,您还可以为grep 使用-F 选项,这将使其将模式视为固定字符串并且效率更高。

&lt;( ) 语法被称为process substitution 并生成一个包含单词列表的文件,即从fileA 中删除word

grep-f 选项从文件中获取模式。 -v 选项反转匹配。所以你会得到fileB 中的行,它们在fileA 的第二列中不包含任何单词。

对于您的输入,它会产生:

http://www.webaddress.com/point?a=pert
https://www.webaddress.com/point?a=njil

【讨论】:

  • 解决方案无法内联编辑 FileB。所以,grep -v -f &lt;(awk '{print $2}' FileA) FileB &gt; temp &amp;&amp; mv temp FileB
  • 用 grep -F 增加速度,cut 可能会比 awk 快一点`
  • 您确定cut 的执行速度比awk 快吗?喜欢cut -d' ' -f2
  • @glennjackman 我同意-F 的观点。但是,如果单词被多个空格分隔,使用cut 可能会出现问题。
  • @myusuf,我不确定。我认为 cut 是一个更简单的可执行文件。您必须对其进行基准测试:使用 time 或类似的东西
【解决方案2】:

这是一个awk 解决方案:

awk 'FNR==NR{a[$2]++;next} {for (i in a) if ($0~i) next}8' fileA fileB
http://www.webaddress.com/point?a=pert
https://www.webaddress.com/point?a=njil

【讨论】:

    【解决方案3】:
    grep -F -v -f <(sed 's/^Word //' FileA) FileB > FileB.new
    
    • -F 表示匹配固定字符串而不是正则表达式。
    • -v 表示输出不匹配的行
    • -f 表示从文件名中获取要匹配的字符串列表
    • &lt;(command line) 为命令行的输出合成一个文件名
    • sed 命令从FileA 的所有行中删除Word 前缀。

    【讨论】:

    • grep 没有像-i 这样的内联选项吗?
    • 不,它不写入文件,它只写入标准输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多