ファイル(file.dat)からのみ最初に出現した文字列をgrepし、別のファイル(出力)から読み取ることで置き換えたいと思いました。例として「AAA T 0001」が含まれている「出力」というファイルがあります
#!/bin/bash
procdir=`pwd`
cat output | while read lin1 lin2 lin3
do
srt2=$(echo $lin1 $lin2 $lin3 | awk '{print $1,$2,$3}')
grep -m 1 $lin1 $procdir/file.dat | xargs -r0 perl -pi -e 's/$lin1/$srt2/g'
done
基本的に私が欲しかったのは:
最初のインスタンスで文字列「AAA」がファイル「file.dat」から grep されるたびに、「AAA」の隣の 2 番目と 3 番目の列を「T 0001」に置き換えたいが、最初の列はそのままにしておく」 AAA」そのまま。上記のスクリプトは機能していないようです。
基本的に、「s/$lin1/$srt2/g」内では「$lin1」変数と $srt2 変数は認識されません。
例:
私のfile.datには行があります
AAA D ---- CITY COUNTRY
私が欲しいのは:
AAA T 0001 CITY COUNTRY
どんなコメントでも大歓迎です。