2011-06-08 63 views
1

的去線線路所以我有每行一個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,而第二文件有超過20萬行。

我與好成績的Fedora使用以下bash命令:

cat file1.txt | while read line; do cat file2.txt | egrep "^$line\ "; done > file3.txt 

但我現在正在試圖複製在Ubuntu的結果,而輸出是一個空文件。這是不是有理由在Ubuntu下工作?

謝謝!

回答

1

awk的典型職業:

awk 'FNR==NR{i[$1]=1;next} i[$1]{print}' file1 file2 

這將打印第二個文件是在第一個索引行。爲了獲得更多速度,請使用mawk。

+0

謝謝,這在Fedora和Cygwin上都很完美,它的速度也非常快,所以這是一個很大的改進。它在我的Ubuntu上沒有工作,所以我相信有些東西是錯的。 – Xosen 2011-06-08 14:59:17

+0

應該在你的Ubuntu上運行。它甚至應該和1977年的老式傳統awk一起工作。它會拋出任何錯誤嗎? – ripat 2011-06-08 15:51:45

0

這條線工作正常,我在Ubuntu:

cat 1.txt | while read line; do cat 2.txt | grep "$line"; done 

然而,這可能是緩慢的第二個文件(200000行)(在第一個文件的行數)將被grepped 1000次

2

您可以一次用grep幾個字符串:

grep -f id_file data_file 

假設id_file包含了所有的ID和DATA_FILE包含ID和數據。

+1

很好的使用grep,但不適合大文件。在1000行和200000行文件上做了一些測試,awk大約快了兩倍。 – ripat 2011-06-08 16:05:27

相關問題