巨大なASCIIファイルに数値を追加する

巨大なASCIIファイルに数値を追加する

背景:

(1)以下は私のASCIIファイル(600Mb以上)の一部のスクリーンショットです。

ここに画像の説明を入力してください。

(1.1) これはコードの一部です:

 0, 0, 0, 0, 0, 0, 0, 0, 3.043678e-05, 3.661498e-05, 2.070347e-05, 
    2.47175e-05, 1.49877e-05, 3.031176e-05, 2.12128e-05, 2.817522e-05, 
    1.802658e-05, 7.192285e-06, 8.467806e-06, 2.047874e-05, 9.621194e-05, 
    4.467542e-05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000421869, 
    0.0003081213, 0.0001938675, 8.70334e-05, 0.0002973858, 0.0003385935, 
    8.763598e-05, 2.743326e-05, 0, 0.0001043894, 3.409237e-05, 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, 0, 0,
  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)各赤い長方形には74個の要素が含まれています。

(3)0以外の各項目に数字を追加したい(例:0.001)。


私の考え:

(1)私の友人はこれがこの作業に役立つと言いましたが、/perl私はこのプログラミングスクリプトに初めて触れました。

(2)戦略は各数字を読み、

(i) if it is a zero, then neglect it; or,
(ii) if it is non-zero, then add 0.001 to this number and replace this number.

(3) 私が気にする点は次のとおりです。

/perl科学的表記法で数字を読むことは可能ですか?

ベストアンサー1

次は動作します。

perl -pe 's/([0-9.e-]+)/$1 == 0 ? $1 : .001 + $1/ge' < input.txt > output.txt
  • -pファイルを1行ずつ処理
  • s/patern/replacement/代替案です。
  • [0-9.e-]+指定された文字(数字など)の1つ以上と一致します。
  • ()すべての数字を覚えてください$1
  • /g全体として置換を適用します。つまり、必要に応じて複数回行ごとに置き換えを適用します。
  • /eコード交換評価
  • condition ? then : else「三項演算子」です。条件がtrue($1 == 0つまり、記憶された数字が0に等しい)の場合は数字が返され、それ以外の場合は0.001が追加されます。

おすすめ記事