我有这些作为输入文件
文件1
Red + Yellow = Orange; Yellow + Blue = Green; Blue + Red = Violet
文件2
Red;1
Yellow;2
Blue;3
我在unix下做这个。
输出
文件3
1 + 2 = Orange; 2 + 3 = Green; 3 + 1 = Violet
答案1
awk 'NR == FNR { # First file
split($0,a,/;/)
#print "change " a[1] "to " a[2]
change[a[1]]=a[2]
}
NR != FNR {
for (i=1;i<NF;i++) {
if ($i in change) {
$i=change[$i]
}
}
print
}' file2 file1
使用 awk 习惯用法 NR != FNR 来判断这是第一个文件还是第二个文件。如果它是第一个文件,则分割该行;
并将映射存储在更改数组中。如果是第二个,则循环输入字段,如果有任何匹配,则替换为正确的更改。最后打印结果。
答案2
#!/bin/bash
IFS=";"
while read NAME VALUE
do
sed -i "s/${NAME}/${VALUE}/g" file1
done < file2