조건에 따라 특정 텍스트를 얻는 쉘 방법

조건에 따라 특정 텍스트를 얻는 쉘 방법

셸 스크립트를 사용하여 데이터베이스 가상 머신에서 데이터베이스 호출을 수행하고 쿼리 응답을 받아 .txt 파일에 저장합니다. 다음과 같이:

X folder Check:
Number of Files on X Outbound
17
Y folder Check:
Number of Files on Y Outbound
17
Z folder Check:
Number of Files on Z Outbound
18

이제 X, Y, Z 각각에 대해. 기본적으로 해당 위치에서 파일(개수)을 받습니다. 따라서 각 X, Y 및 Z에 대해 "18"개의 파일을 얻을 것으로 예상됩니다. 이제 셸을 사용하여 18개 파일을 받지 못하는 폴더를 알고/저장할 수 있기를 원합니다.

예: 위 시나리오에서는 X 및 Y 폴더에 대한 누락된 파일을 찾아야 합니다.

답변1

sed -n 'N;N;/\n18$/!s/ folder Check:\n.*\n/ /p'

이 텍스트는 다음과 같이 출력됩니다.

X 17
Y 17
  • -nsed기본적으로 패턴 공간을 인쇄하지 않도록 지시합니다 (우리는 p원하는 패턴 공간을 인쇄하기 위해 명령의 플래그를 사용합니다 s).
  • N;N: 다음 두 라인을 패턴 공간으로 끌어오고, 3라인 패턴 공간에서 한 번에 3라인씩 처리합니다.
  • /\n18/!: 패턴 공간이 ( )가 아니고 ( )로 !끝나는 경우$<newline>18
  • s/folder Check:\n.*\n//p: 폴더명과 개수 사이의 부분을 삭제하고 p인쇄합니다. 원하는 내용에 따라 폴더 이름만 유지 s/ folder Check:\n.*//p하거나( ) 세 줄 전체를 덤프할 수도 있습니다( ).p

awk같은

awk '{sub(/ folder Check:$/, ""); folder = $0; getline; getline; count = $0}
     count != 18 {print folder, count}'

답변2

$ awk '{n=(NR%3)} n==1{folder=$1} (n==0) && ($0!=18){print folder, $0}' file
X 17
Y 17

관련 정보