라인을 선택하고 명령 출력을 다시 포맷하는 방법은 무엇입니까?

라인을 선택하고 명령 출력을 다시 포맷하는 방법은 무엇입니까?

라인 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행이 중괄호가 제거된 상태로 병합됩니다. 인쇄된 내용입니다.

관련 정보