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) 내 목표는 0이 아닌 값에 특정 값을 추가하는 것입니다.

(3) 다른 스택 교환 사용자들의 열렬한 도움 덕분에 다음 방법을 사용하여 솔루션을 얻었습니다.

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) 변경 사항이 input.txt 파일에 직접 추가되도록 option위 스크립트에 하나를 추가할 수 있나요? 수정 을 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행 범위 연산자를 에뮬레이트하는 트리거 연산자를 사용합니다 sed.awk

관련 정보