使用 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) 感谢其他 stack-exchange 用户的热情帮助,我使用以下方法得到了解决方案:

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

我的问题:

我有两个后续问题:

(Q1)我知道sed,我们可以从输入文件中提取几行并将这些行保存到输出文件中,方法是:

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

从 中提取第 123 行到第 345 行input.txt并保存到ouput.txt.

但是,我不知道如何修改上述perl脚本以将数字添加到 ascii 文件的指定行。

(Q2) 我可以option在上面的perl脚本中添加一个,以便我的更改直接添加到 input.txt 文件中吗?我尝试修改-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

相关内容