워터폴 모델에 줄을 들여쓰기 위해 grep 명령의 출력을 인쇄합니다.

워터폴 모델에 줄을 들여쓰기 위해 grep 명령의 출력을 인쇄합니다.

내 grep 출력에는 각 후속 행에서 들여쓰기가 1씩 증가하는 행이 표시되어야 합니다.

grep 명령 출력은 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

답변1

GNU를 사용하면 awk파일의 줄 번호에서 1을 뺀 공백 수만큼 들여쓰기된 각 입력 줄을 출력할 수 있습니다.

grep ... | awk '{ printf "%2$*1$s\n", NR+length-1, $0 }'

여기에 사용된 형식 문자열은 필드 너비가 첫 번째 인수( 입력의 현재 줄의 시퀀스 번호에 줄의 길이를 더한 값에서 1을 뺀 값) 로 제공되는 printf두 번째 문자열 인수(즉, 현재 줄)의 출력을 지정합니다. ). 이것의 효과는 당신이 정확히 원하는 것과 같은 엇갈린 방식으로 라인 출력을 얻게 된다는 것입니다.$0NR+length-1

대부분의 비 GNU 구현은 awk이 상위 수준 printf형식의 사용을 지원하지 않으므로 이를 다르게 해결해야 합니다.

grep ... | awk '{ print indent $0 } { indent = indent " " }'

위의 명령은 첫 번째 명령보다 이해하기 쉬울 수 있습니다 awk. 이라는 변수를 사용하고 있습니다 indent. 이 변수에는 공백만 포함되어 있으며 현재 값 앞에 의 접두사가 붙은 현재 출력 줄 뒤의 각 입력 줄에 새 공백 문자를 추가합니다 indent.

위의 두 파이프에는 질문을 전달하는 동안 언급한 명령을 grep ...나타냅니다 .grep

관련 정보