2010-09-14 96 views
0

我有2個兩個文件shell腳本削減和sed幫助

$cat file1.txt 
field1=value1 
field2=value2 
field3=value3 
:: 
:: 

$cat file2.txt 
something.field1.some 
otherthing.field2.anything 
anything.field3.something 

我需要閱讀FILE1.TXT,並檢查是否爲FILE2.TXT字段N與值N

取代

,這樣的結果將是

something.value1.some 
    otherthing.value2.anything 
    anything.value3.something 

回答

4

只要在你的域和值沒有特殊sed型字符,你可以使用一個meta-sed方法:

pax> sed -e 's/^/s\/\\./' -e 's/=/\\.\/./' -e 's/$/.\/g/' file1.txt >x.sed 
pax> sed -f x.sed file2.txt 

something.value1.some 
otherthing.value2.anything 
anything.value3.something 

如果你看一下x.sed文件,你會看到第一sed只是讓被你的第二個文件執行sed命令的列表。

+0

thanks..i'll嘗試。 – 2010-09-14 07:55:27

2

用awk

$ awk -F"[=.]" 'FNR==NR{a[$1]=$2;next}{$2=a[$2]}1' OFS="." file1 file2 
something.value1.some 
otherthing.value2.anything 
anything.value3.something 
+0

謝謝你的回答,我會在學習awk後使用這個方法。我知道關於sed的一些信息,但在awk中爲零:)再次感謝。 – 2010-09-14 07:56:46

0

這不幸的是,需要將文件進行排序:

tr = . < file1.txt | join -t . -1 1 -2 2 -o 2.1 1.2 2.3 - file2.txt