awk를 사용하여 정규 표현식의 첫 번째 인스턴스만 가져오기

awk를 사용하여 정규 표현식의 첫 번째 인스턴스만 가져오기

.txt내 디렉토리에는 쌍극자 모멘트에 대한 정보가 포함된 파일이 많이 있습니다. 다음과 같이 진행됩니다.

Dipole Moment: [D]
     X:     1.2808      Y:     0.2908      Z:     1.0187     Total:     1.6622
lorem ipsum
text 
that is 
not 
relevant 
Dipole Moment: [D]
     X:     1.2808      Y:     0.2908      Z:     1.0187     Total:     1.6622
more text

이 파일에서 총 쌍극자 모멘트를 추출하고 싶습니다. 다음 스크립트를 실행하고 있습니다.

awk '/Dipole Moment: \[D\]/{found=1;next} found{print $NF;found=""}' *.txt > dipole_bma.txt

스크립트는 1.6622를 두 번 인쇄합니다. 모든 쌍극자 모멘트는 각 파일에 두 번씩 포함됩니다 Total. 정규식이 파일에 두 번 나타나기 때문에 두 번 인쇄된 것으로 보입니다.

내 질문은 각 파일에서 총 쌍극자 모멘트를 한 번만 인쇄하려면 어떻게 해야 합니까?

답변1

사용nextfile성명:

awk '/Dipole Moment: \[D\]/{found=1;next} found{print $NF;nextfile;}' *.txt

답변2

Gnu sed는 다음을 수행할 수 있습니다:

sed -ns '
  /^Dipole Moment: \[D]/!d
  $!N;/\n/s/.* //p;:n;n;bn
' ./*.txt
  • -s옵션(nonPosix)은 파일을 별도의 스트림으로 처리합니다.
  • -n다음 레코드를 가져올 때까지 패턴 공간의 기본 인쇄를 억제합니다.
  • 쌍극자 모멘트 라인 뒤에 다음 라인을 패턴 공간에 붙여넣습니다.
  • 마지막 공백까지 제거하면(후행 공백이 없다고 가정) 쌍극자 모멘트 값인 마지막 필드가 인쇄됩니다.
  • 그런 다음 현재 파일의 끝으로 이동합니다. 다음 파일에 대해 전체 프로세스를 반복하십시오.

관련 정보