2つの異なるパターンの間に数字を掛けてファイル全体を印刷します。

2つの異なるパターンの間に数字を掛けてファイル全体を印刷します。

パターン間の数字を乗数に置き換えて、すべての行を印刷したいです。このファイルはnewick形式のツリーファイルで、1行だけが含まれています。私の目標は)前後のすべての数です:。 2つの記号の間のすべての数に100を掛けたい。

文書:

((((A_8:0.000846,(A_5:0.002449,(A_1:1e-06,((A_4:1e-06,((A_7:1e-06,A_6:0.001061)0.714000:1e-06,A_3:1e-06)0.314500:1e-06)0.358667:1e-06,A_2:1e-06)0.361000:1e-06)0.434800:1e-06)0.683500:0.001619)0.888571:0.001931,A_9:0.00069)0.688471:0.000691,...

私にとって最も簡単な方法は、最初にすべての「:」記号を新しい行に置き換えてファイルを分割するようです。したがって、私のすべてのターゲット番号は別々の行に表示され、)以下のawkスクリプトを使用してターゲット番号に100を掛けますが、ターゲット番号がない行を保持することはできません。

スクリプト:

sed 's/:/\n/g' df9.tree | awk -F")" '{OFS=")"} $2=$2*100 {print $0}'
sed 's/:/\n/g' df9.tree | awk '$NF ~/)/ {$NF *=100}1'

この場合、次の数字を掛けて)ファイル全体を印刷するにはどうすればよいですか?それとも:間の数字を直接見つけて)100を掛けてファイル全体を印刷するもう一つの簡単な方法はありますか?

アップデート:期待される出力

((((A_8:0.000846,(A_5:0.002449,(A_1:1e-06,((A_4:1e-06,((A_7:1e-06,A_6:0.001061)71.4000:1e-06,A_3:1e-06)31.4500:1e-06)35.8667:1e-06,A_2:1e-06)36.1000:1e-06)43.4800:1e-06)68.3500:0.001619)88.8571:0.001931,A_9:0.00069)68.8471:0.000691,...)

ベストアンサー1

awk 'BEGIN {OFS=FS=":"; ORS=RS=")"} NR>1 {$1=sprintf("%.4f", $1 * 100)}1' df9.tree

別々のRSレコードとFSフィールドが許可されている場合、必須番号は常に最初のレコードの後の最初のフィールドにあります。

おすすめ記事