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