ディレクトリ内の複数のファイルを読み取り、各ファイルの各行を調べて、任意の行から特定の文字列( "gene_height")を読み取るたびに、その行の2つの数字を置き換えるコマンドを実行しようとしています。たとえば、次のようになります。
complexion={ "complexion_3" 60 "complexion_3" 132 }
gene_height={ "normal_height" 192 "normal_height" 161 }
「gene_height」が表示され、192と161を170と220の間の任意の数字に置き換える必要がありますが、「gene_height」で始まらないため、前の行に60と132を残す必要があります。私が現在持っているものほぼうまくいきますが、問題は$RANDOMが実際にはファイルごとに1回だけ実行されるため、すべての項目に同じ数字を使用し、1行で作業するように分割する良い方法が見つからないことです。
現在私は以下を使用しています:
for f in *.txt; do sed -i -e '/\bgene_height\b/ s/ [0-9][0-9]*/ '$((169+RANDOM%51))'/g' $f; done
助けてくれてありがとう!
ベストアンサー1
試してみてくださいawk
(sedではありません)。
awk '/^gene_height/{
$3=sprintf("%.0f",(169+rand()*5))
$5=sprintf("%.0f",(169+rand()*5))
}1' test*.txt