2012-10-15 47 views
-1

我有兩個文件閱讀和操作,在linux大文件有效

文件1:

030055 a 
033366 b 

文件2:

03005515077 x||03215549849 y||03336678899 z||03005577733 xx||03005583838 yy 

一個shell腳本,需要讀取文件1行按行(030055a)分隔數字值(030055),在文件2中找到它。如果找到,則用'a'替換字符值'030055 a'。

舉例: 文件1的第一條記錄:030055一 其中該號碼模式匹配的以下

03005515077 x和03005577733 XX和03005583838 YY

只是其中的x替換文件2,記錄比較一下, XX和YY用,這樣它會成爲

03005515077和03005577733和03005583838一個

+1

對不起,但我們不爲你做你的工作。你有什麼嘗試? – m0skit0

+0

你有沒有考慮過使用'awk'和/或'sed'? –

+0

嘗試使用awk,但連續行讀取花費很多時間 – Ali

回答

1

東西沿着這些線路(未測試的);

#!/bin/bash 

while read line 
do 
    COL1 = `cat $line | awk '{print $1}'` 
    COL2 = `cat $line | awk '{print $2}'` 
    sed "s/(${COL1}[0-9]+)[^||]*||/\1 ${COL2}||/g" file_2 > file_2.out 
    mv file_2.out file_2 
done < "file_1" 
+0

'COL1'和'COL2'不會在這些單引號內展開。另外,在'sed'看到內容之前,'cat'和'file_2'的無意識使用將被重定向破壞 - 保存到'file_2.out'並在必要時重命名。否則,總體思路是正確的。 – twalberg

+0

@twalberg你說得很對,我只是很快就輸入了。重定向是非常棘手的,因爲它需要每次迭代使用相同的結果文件才能導致所有更新。我會建議用'>>'來構建它,但不匹配的結果將不會被複制。 – lynks

+0

不理我,它是漫長的一天,我說的大部分都是錯的。我有刺,並且當更正確的答案到達時,將它留在這裏被刪除。 – lynks