当前位置:  开发笔记 > 编程语言 > 正文

awk/sed/grep删除与另一个文件中的字段匹配的行

如何解决《awk/sed/grep删除与另一个文件中的字段匹配的行》经验,为你挑选了0个好方法。

我有一个file1,有几行(十行),一个更长的file2(~500,000行).尽管存在相同的字段子集,但每个文件中的行不相同.我想从file1中的每一行获取字段3-5,并搜索file2以获得相同的模式(只有这三个字段,按相同顺序 - 在file2中,它们属于字段2-4).如果找到任何匹配项,那么我想从file1中删除相应的行.

例如,file1:

2016-01-06T05:38:31 2016-01-06T05:23:33 2016006 120E A TM Current
2016-01-06T07:34:01 2016-01-06T07:01:51 2016006 090E B TM Current
2016-01-06T07:40:44 2016-01-06T07:40:41 2016006 080E A TM Alt
2016-01-06T07:53:50 2016-01-06T07:52:14 2016006 090E A TM Current
2016-01-06T08:14:45 2016-01-06T08:06:33 2016006 080E C TM Current

文件2:

2016-01-06T07:35:06.87 2016003 100E C NN Current 0
2016-01-06T07:35:09.97 2016003 100E B TM Current 6303
2016-01-06T07:36:23.12 2016004 030N C TM Current 0
2016-01-06T07:37:57.36 2016006 090E A TM Current 399
2016-01-06T07:40:29.61 2016006 010N C TM Current 0

......(以及500,000行)

所以在这种情况下,我想删除file1的第四行(就地).

以下是我要删除的行:

grep "$(awk '{print $3,$4,$5}' file1)" file2

因此,一种解决方案可能是将其传输到sed,但我不清楚如何在sed中设置匹配模式来自管道输入.在网上搜索建议awk可能会完成所有这些(或者也许是sed或其他东西),所以想知道什么是干净的解决方案.

此外,速度有点重要,因为其他进程可能会尝试修改文件(我知道这可能会带来更多的复杂性......).匹配通常位于file2的末尾,而不是开头(如果有一些方法可以从下往上搜索file2).

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有