【问题标题】:remove whole line from file with 2 column from a text file with 1 column in linux [closed]从 linux 中具有 1 列的文本文件中删除具有 2 列的文件的整行 [关闭]
【发布时间】:2016-07-26 11:13:57
【问题描述】:

E.G

文件 A

abc 123

定义 456

吉789

文件 B

定义

结果文件

abc 123

吉789

我用 sed、grep 试过了,但它不起作用。我只是说学习 linux 并找不到类似的东西。

谢谢

//*-----------

grep -wvf 工作,但现在我发现我在前面有“#”的地方遇到了问题。那些也将被删除。修改为 grep -wxvf,命令根本不起作用。我需要 grep 以外的其他命令吗?

【问题讨论】:

  • grep -wvf fileB fileA 使用man grep
  • 成功了,谢谢。另一个问题:带有#infront 的stings 怎么样?例如,abs 123 和#abc 123,我只想删除找到“#abc”的行?

标签: linux bash shell sed grep


【解决方案1】:
awk 'FNR==NR{a[$0];next}(!($1 in a)){print}' fileb filea

{a[$0];next}- 此块执行到 FNR==NR(这意味着对于 fileb 的所有行)。 "next" 确保在此块之后没有代码被执行。

在 fileb 行的末尾,您有一个关联数组,其中键为 filb 中的行,值为 null。

然后开始处理 filea 中的行。

{print} 将对 filea 中的所有行执行,但条件是 (!($1 in a)) 这意味着仅当 filea 的第一个字段作为关联数组 a 中的键存在时才打印 filea 中的行

【讨论】:

  • 这是一个纯代码的答案,请扩展它以帮助其他用户学习,而不仅仅是在他们身上转储代码。
【解决方案2】:

由于我无法回复我在这里发布的Ur评论,为了删除以“#”开头的行尝试

sed '/^#/d' filea fileb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多