我有两个文件文件A&文件B
fileA 有很多 IP,而 fileB 有较少 IP。我们该怎么办
fileA - fileB = fileC(没有公共 IP 的文件)
文件A
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
文件B
4.4.4.4
1.1.1.1
文件C
2.2.2.2
3.3.3.3
5.5.5.5
我在谷歌上有很多选择,但找不到任何相关的东西
答案1
该comm
工具在这里可能很有用,特别是如果您不关心结果按字母数字顺序排序:
comm -23 <( sort -u fileA ) <( sort -u fileB ) >fileC
有关其使用的详细信息,请参阅man sort
和。man comm
答案2
为此fileA - fileB
,您可以使用 awk (这不会仅在 中获取 IP fileB
):
awk 'NR==FNR{a[$0];next}!($0 in a)' fileB fileA
NR
指总记录数,FNR
指当前文件中的记录号(一般为行号)。因此,如果第一个文件中存在一行,则第二个文件中不会显示该行。
如果您需要删除 fileA 中的重复行,请使用:
awk 'NR==FNR{a[$0]++;next}!a[$0]++' fileB fileA
答案3
这个问题可以用几种不同的方式来解释。
我假设每一行在它所在的文件中都是唯一的。
假设您要从中删除
fileA
也在 中找到的条目fileB
。fileB
这将从 中的IP 地址中删除在 中找到的 IP 地址fileA
:grep -v -Fx -f fileB fileA >fileC
这里使用的选项
grep
确保模式(从fileB
using读取的行-f
)被视为字符串而不是正则表达式 (-F
),并且我们匹配整行而不是子字符串 (-x
)。我们还反转匹配的含义,以-v
输出fileA
与 中的任何行都不匹配的所有行fileB
。假设您想要获取唯一的所有条目
fileA
或者其独特之处在于fileB
:以下输出文件中不重复的行。它使用
-u
withuniq
,这是一个非标准但常用的选项,用于输出在后续行中不重复的行。sort fileA fileB | uniq -u >fileC
答案4
如果保留顺序并不重要,您可以首先删除第一个文件中的重复项,然后将输出与第二个文件连接两次(用于删除它特有的任何内容),然后仅打印带有uniq -u
.
sort -u fileA | cat - fileB fileB | sort | uniq -u