比较两个文件得到相同的列表

比较两个文件得到相同的列表

file1.txt(50行)

TERYUFV00000010753
TERYUFV00000009526 

file2.txt(500行)

TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target

输出.txt

TERYUFV00000010753 refids_11775_known_1/1_target
TERYUFV00000009526 refids_739_known_8/10_target

比较 file1.txt(有 50 行)和 file2.txt(有 500 行),从 file2.txt 中获取与 file1.txt 相同的列表。

我尝试了 join 和 fgrep 命令,它输出空文件

答案1

当您使用 join 时,每行上的条目就像数据库中的“单元格”,但它们应该排序,所以您可以尝试,

sort file1.txt > file1_t.txt
sort file2.txt > file2_t.txt

然后进行连接

$ join file1_t.txt file2_t.txt

这将为您提供外部联接,即两个文件中所有出现的单元格的列表。要将此列表减少为仅两个文件中的条目,请将上述命令的输出通过管道传输到 uniq

$ join file1_t.txt file2_t.txt | uniq

答案2

fgrep -f file1.txt file2.txt

这里我们从 file1.txt 获取搜索模式并在 file2.txt 中搜索它。由于文本是固定的,我们用于fgrep更快的搜索操作。

在此输入图像描述

答案3

你需要sort在你之前join

$ cat a.in
TERYUFV00000010753
TERYUFV00000009526
$ cat b.in
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target
$ join a.in b.in
$ join <(sort a.in) <(sort b.in)
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000010753 refids_11775_known_1/1_target

答案4

以下行有效吗?

grep -iw -f file1.txt file2.txt

如果文件是从 Windows 客户端上传到服务器的,也许您应该首先运行 dos2unix。

dos2unix file1.txt file2.txt

如果上述命令不起作用,您可以尝试以下几行来查看 file1.txt 中的行首或行尾是否有多余的非打印字符。 file1.txt 项中多余的非打印字符可能会导致 file2.txt 中的 grep 失败。

cat -v file1.txt
sed -n -l file1.txt

相关内容