Usando o Perl para modificar as linhas especificadas de um arquivo ASCII

0

Histórico:

(1) Eu tenho um conjunto de dados de notação científica:

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) Eu pretendo adicionar alguns valores a esses valores diferentes de zero.

(3) Graças à ajuda de outros usuários do Exchange, eu obtive uma solução usando:

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

Meu problema:

Eu tenho duas perguntas a seguir:

(Q1) Eu sei que a partir de sed , podemos extrair algumas linhas de um arquivo de entrada e salvar essas linhas em um arquivo de saída:

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

Que extraiu as linhas 123 para a linha 345 de input.txt e salvou para ouput.txt .

No entanto, não tenho idéias de como modificar o script perl acima para adicionar números às linhas especificadas do arquivo ascii.

(Q2) Posso adicionar um option ao script perl acima, de forma que minhas alterações sejam adicionadas diretamente ao arquivo input.txt? Eu tentei modificar -pe como -pei , mas parece que não funciona.

Qualquer ajuda será apreciada.

    
por nam 29.05.2015 / 19:30

1 resposta

2

Simplesmente:

perl -i.bak -pe 's/([0-9.e-]+)/$1 == 0 ? $1 : .001 + $1/ge if 123..345' input.txt
  • -i.bak make perl edite o arquivo no local e faça um arquivo de backup input.txt.bak (convido a ler esta questão )

  • if 123..345 usando o operador flip-flop, emule o operador de faixa de linha de sed , awk .

por 29.05.2015 / 19:41