複数のファイルから行を読み取ると、sedの$RANDOM結果が異なります。

複数のファイルから行を読み取ると、sedの$RANDOM結果が異なります。

ディレクトリ内の複数のファイルを読み取り、各ファイルの各行を調べて、任意の行から特定の文字列( "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

おすすめ記事