文本处理:将一行中的字符串替换为相应的字符串

文本处理:将一行中的字符串替换为相应的字符串

我有这些作为输入文件

文件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

相关内容