Perlを使用してASCIIファイルの指定された行を変更する

Perlを使用してASCIIファイルの指定された行を変更する

背景:

(1) 科学的表記法のデータセットがあります。

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.503832e-05, 1.433673e-05, 2.557402e-05, 
    3.081098e-05, 4.044465e-05, 2.480817e-05, 2.681778e-05, 1.533265e-05, 
    2.3156e-05, 3.193812e-05, 5.325314e-05, 1.639066e-05, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 2.259782e-05, 0.0004197799, 2.65868e-05, 0.0002485498, 
    3.485129e-05, 2.454055e-05, 0.0002096856, 0.0001910835, 1.969936e-05, 
    2.974743e-05, 8.983165e-05, 0.0004263787, 0.0004444561, 0.000241368, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

(2)私の目標は、ゼロ以外の値に特定の値を追加することです。

(3) 他のスタック交換ユーザーの熱烈な助けのおかげで、次の方法を使用してソリューションを入手しました。

perl -pe 's/([0-9.e-]+)/$1 == 0 ? $1 : .001 + $1/ge' < input.txt > output.txt

私の質問:

次の2つの質問があります。

(Q1)わかりましたsed。入力ファイルから数行を抽出し、次の方法でこの行を出力ファイルに保存できます。

sed -n (123,345p) input.txt > output.txt

ここから123~345行を抽出input.txtしてouput.txt

perlただし、上記のスクリプトを変更して、ASCIIファイルの指定された行に数字を追加する方法がわかりません。

(Q2)変更がinput.txtファイルに直接追加されるように、上記のoptionスクリプトに1つを追加できますか?修正しようperlとしましたがうまくいかないようです。-pe-pei

どんな助けでも大変感謝します。

答え1

簡単に:

perl -i.bak -pe 's/([0-9.e-]+)/$1 == 0 ? $1 : .001 + $1/ge if 123..345' input.txt
  • -i.bakperlファイルをその場で編集し、バックアップファイルを作成しますinput.txt.bakこの問題)

  • if 123..345行範囲演算子をエミュレートするトリガ演算子を使用しますsedawk

関連情報