複数回見つかったパターンに対して異なる代替テキストを使用する方法[重複]

複数回見つかったパターンに対して異なる代替テキストを使用する方法[重複]

サンプルログファイル:

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

関連情報