여러 라인을 하나의 출력으로 수집

여러 라인을 하나의 출력으로 수집

다음과 같은 줄을 포함하여 많은 내용이 포함된 텍스트 파일이 있다고 가정해 보겠습니다.

...    
...
ABCD1 1234 12345
XYZ
foo bar 1234597890
...
DEFG2 5678 56789
XYZ
foo bar 0987654321
...
...

를 사용하여 데이터 시리즈를 추출하고 찾아야 합니다 grep -C1 "XYZ". 이제 내가 해야 할 일은 다음과 같은 출력을 조합하는 것입니다.

ABCD1 1234567890 12345 1234
DEFG2 0987654321 56789 5678

grep -z "XYZ""상관 없음" 행을 제거하고 awk행에서 데이터를 추출하여 원하는 방식으로 조합 할 수 있다는 것을 알고 있습니다 . 하지만 내가 놓친 것은 일치하는 행의 더하기 기호 앞에 있는 행을 어떻게 삭제할 수 있습니까 /n? 그럼 한 줄에서 다음 줄로 데이터를 파이프할 수 있나요?grepgrepawk

답변1

에서 모든 작업을 수행하는 것이 더 우아할 수 있지만 awk빠르고 지저분한 작업을 원한다면 awk레코드 구분 기호를 grep그룹 구분 기호와 동일하게 설정한 다음 원하는 공백 구분 기호를 원하는 순서대로 인쇄할 수 있습니다.

grep -C1 XYZ file | awk -vRS='\n--' '{print $1, $NF, $3, $2}'
ABCD1 1234597890 12345 1234
DEFG2 0987654321 56789 5678

관련 정보