.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
다음 레코드를 가져올 때까지 패턴 공간의 기본 인쇄를 억제합니다.- 쌍극자 모멘트 라인 뒤에 다음 라인을 패턴 공간에 붙여넣습니다.
- 마지막 공백까지 제거하면(후행 공백이 없다고 가정) 쌍극자 모멘트 값인 마지막 필드가 인쇄됩니다.
- 그런 다음 현재 파일의 끝으로 이동합니다. 다음 파일에 대해 전체 프로세스를 반복하십시오.