라인 1과 4만 인쇄되도록 다음 출력 형식을 지정하는 방법이 있습니까? 다음과 같이 첫 번째 행과 네 번째 행이 같은 줄에 나타날 수 있는 경우:
sw pool test
(괄호 없음)status up
명령 및 출력 예:
주문하다:
show server pool
산출:
sw pool test { members 1 ip_addr 200.200.200.111 status up
원하는 출력 형식(라인 1 끝에 있는 중괄호를 제거해야 함):
sw pool test status up
바람직하게는 awk를 사용하여 이 출력을 어떻게 얻을 수 있습니까?
답변1
awk를 사용하세요
그러면 첫 번째 {
와 네 번째 줄이 인쇄됩니다.
$ show server pool | awk 'NR==1{sub(/{/, ""); printf "%s",$0} NR==4'
sw pool test status up
어떻게 작동하나요?
NR==1{sub(/{/, ""); printf "%s",$0}
조건은
NR==1
첫 번째 행을 선택합니다. 이 줄의 경우{
delete 명령을 사용한sub
다음 를 사용하여 줄을 인쇄합니다printf
(후행 개행 없이).NR==4
조건은
NR==4
네 번째 행을 선택합니다. 이 조건에 대해 지정된 작업이 없으므로awk
기본 작업이 수행됩니다. 우리가 원하는 대로 라인이 인쇄됩니다.
sed 사용
동일한 기능이 다음과 같이 작동합니다 sed
.
$ show server pool | sed 'h;N;N;x;N; s/{\n//'
sw pool test status up
어떻게 작동하나요?
h
이렇게 하면 예약된 공간에 첫 번째 행이 저장됩니다.
N;N
2호선과 3호선입니다.
x
이는 홀드 공간과 패턴 공간을 교환합니다. 이렇게 하면 라인 1이 다시 패턴 공간에 배치됩니다.
N
그러면 다음 줄(4번째 줄)을 패턴 공간으로 읽어 들여 1번째 줄에 추가합니다.
s/{\n//
그러면 1행 끝에서 중괄호와 개행 문자가 제거되어 이제 1행과 4행이 중괄호가 제거된 상태로 병합됩니다. 인쇄된 내용입니다.