我有两个包含一些类似数据和一些唯一数据的文件。 我想知道 first.txt 中出现的哪些数据未出现在 second.txt 中。
起初,我认为使用diff作为显而易见的选项,但数据在文件中出现的顺序很重要。
这就是我的意思。如果数据是有序的,那么我得到了我期望的信息。
macbook:labs alex$ cat first.txt
1
2
3
4
5
macbook:labs alex$ cat second.txt
1
3
5
macbook:labs alex$ diff first.txt second.txt
2d1
< 2
4d2
< 4
但是,如果我们将文件内部数据的顺序混合一点,那么输出就会大不相同
macbook:labs alex$ cat first.txt
5
2
1
4
3
macbook:labs alex$ cat second.txt
3
1
5
macbook:labs alex$ diff first.txt second.txt
1,4d0
< 5
< 2
< 1
< 4
5a2,3
> 1
> 5
我还想过在一种循环中使用grep
#!/bin/bash
a="first.txt"
b="second.txt"
for row in `cat $a`
do grep $row $b
done
但是,这只会告诉我第二次中的内容,也就是第一次。我想找出第一个
的独特之处也许我不太了解它,但grep的 - 反向选项似乎也没有帮助我。
#!/bin/bash
a="first.txt"
b="second.txt"
for row in `cat $b`
do
grep -v $row $a
done
有人可以对此发光吗?
谢谢,
答案 0 :(得分:1)
如果您有选择,可以使用comm
查找第一个文件的唯一数据,如下所示:
comm -23 file1 file2
-23会抑制两个文件中的行,或仅抑制文件2中的行。首先需要对文件进行排序,但如果不是,则可以通过sort
命令对其进行管道。
答案 1 :(得分:0)
我想了解
中出现的数据first.txt
中没有出现second.txt
您可以使用grep -vf
:
grep -vFf second.txt first.txt
2
4