サンプルログファイル:
apple AAA rose
banana AAA tulip
orange AAA marigold
テキストファイルを置き換える:
111
222
333
予想出力:
apple 111 rose
banana 222 tulip
orange 333 marigold
答え1
猫の皮をむく方法はいくつかあります。 2つのファイル間の接続が1行にあるとしましょう。たとえば、次のようにpaste
行を配置し、正規AAA
表現を使用して「逆参照」を含むフィールドに末尾の単語を移動します。
paste sample_log replacement-text | sed -r 's/AAA ([^[:space:]]*[[:space:]]*)(.*$)/\2 \1/'
apple 111 rose
banana 222 tulip
orange 333 marigold
あるいは、awk
置換項目を配列として読み込み、2番目のフィールドをその配列要素に置き換える方法は次のとおりです。
awk 'NR==FNR {T[NR] = $0; next } {$2 = T[FNR]} 1' replacement-text sample_log
apple 111 rose
banana 222 tulip
orange 333 marigold
答え2
#!/bin/bash
paste logfile.txt replacement.txt | while IFS= read -r line; do
echo $line | sed "s/`echo $line | awk '{print $2}'`/`echo $line | awk '{print $4}'`/g" | awk '{print $1 " " $2 " " $3 " "}'
done