2010-09-14 95 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