如果它们包含在file2中找到的模式,我想比较两个文件并删除file1中的行。我做了一些搜索,我能找到的最接近的答案是如何删除出现在另一个文件中的行。
如果可能的话,我喜欢简单的grep,awk,sed等。我在IP地址上进行匹配,如下所示。
文件1
10.10.50.1 00:00:10:23 0000.0012.3456 Vlan1
10.10.50.2 00:00:12:34 1234.56AB.CDEF Vlan2
10.10.50.3 00:00:23:10 ABCD.EF12.345 Vlan3billion
file2的
these-are some_words 10.10.50.2 andmaybe some-other words
theseare somewords 10.10.50.99 and-maybe some_other words
预期产出:
10.10.50.1 00:00:10:23 0000.0012.3456 Vlan1
10.10.50.3 00:00:23:10 ABCD.EF12.345 Vlan3billion
答案 0 :(得分:1)
如果我理解正确, 您希望从第一个与第二个文件中的任何IP地址匹配的文件行中排除。
这个简单且无可否认的有点懒惰的解决方案可能足以满足您的目的:
grep -v file1 -Fwf <(awk '{ print $3 }' file2)
Awk用IP地址提取第3列,
并且grep
会将这些用作固定模式(-F
),并且只匹配完整的字词(-w
)。
如果IP地址不总是第3列,
那么你可以通过使用与grep
的模式匹配来提取它们,
如@tripleee所示:
grep -v file1 -Fwf <(grep -owE '[1-9][0-9](\.[0-9]{1,3}){3}' file2)
答案 1 :(得分:0)
awk
救援!
$ awk 'NR==FNR{a[$3];next} !($1 in a)' file2 file1
10.10.50.1 00:00:10:23 0000.0012.3456 Vlan1
10.10.50.3 00:00:23:10 ABCD.EF12.345 Vlan3billion
答案 2 :(得分:0)
更多awk ......核心从karafka挣扎出来..
$ awk 'NR==FNR{a[gensub(/^.* (([0-9]{1,3}\.){3}[0-9]{1,3}) .*$/,"\\1",1,$0)];next} !($1 in a)' file2 file1
10.10.50.1 00:00:10:23 0000.0012.3456 Vlan1
10.10.50.3 00:00:23:10 ABCD.EF12.345 Vlan3billion