셸 스크립트를 사용하여 데이터베이스 가상 머신에서 데이터베이스 호출을 수행하고 쿼리 응답을 받아 .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
-n
sed
기본적으로 패턴 공간을 인쇄하지 않도록 지시합니다 (우리는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