所以我有第一个文件,每行都有一个ID,例如:
458-12-345
466-44-3-223
578-4-58-1
599-478
854-52658
955-12-32
然后我有第二个文件。它在每个文件中都有一个ID,后跟信息,例如:
111-2457-1 0.2545 0.5484 0.6914 0.4222
112-4844-487 0.7475 0.4749 0.1114 0.8413
115-44-48-5 0.4464 0.8894 0.1140 0.1044
...
第一个文件只有1000行,其中包含我需要的信息的ID,而第二个文件的行数超过200,000行。
我在fedora中使用了以下bash命令,效果很好:
cat file1.txt | while read line; do cat file2.txt | egrep "^$line\ "; done > file3.txt
但是我现在正试图在Ubuntu中复制结果,输出是一个空白文件。有没有理由不在Ubuntu中工作?
谢谢!
答案 0 :(得分:2)
您可以一次grep几个字符串:
grep -f id_file data_file
假设 id_file 包含所有ID, data_file 包含ID和数据。
答案 1 :(得分:1)
awk的典型工作:
awk 'FNR==NR{i[$1]=1;next} i[$1]{print}' file1 file2
这将打印第二个文件中第一个具有索引的行。为了更快的速度,请使用mawk。
答案 2 :(得分:0)
这行在Ubuntu中适合我:
cat 1.txt | while read line; do cat 2.txt | grep "$line"; done
然而,这可能会很慢,因为第二个文件(200000行)将被grepped 1000次(第一个文件中的行数)