私はこれを入力ファイルとして持っています
ファイル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番目のファイルであるかを確認してください。最初のファイルの場合は、行を分割して;
変更の配列にマップを保存します。 2番目の場合は、入力フィールドを繰り返し、一致するものがある場合は正しい変更に置き換えます。最後に結果を印刷します。
答え2
#!/bin/bash
IFS=";"
while read NAME VALUE
do
sed -i "s/${NAME}/${VALUE}/g" file1
done < file2