출력을 행과 열로 분할해야 함

출력을 행과 열로 분할해야 함

현재 스위치에서 발생하는 모든 끝점 이름과 호출을 캡처하고 출력을 파일로 보내는 스크립트를 작성 중입니다.

현재 출력은 다음과 같습니다.

Registration ID                               Nitin_01
Ongoing Calls                                 9 (0:9)
Registration ID                               Nitin_02
Ongoing Calls                                 6 (6:0)

추가 엔드포인트는 다음과 같습니다(약 200개 이상의 엔드포인트)

여기서 원하는 출력은 다음과 같아야 합니다.

Registration ID  Ongoing Calls
Nitin_01           9
Nitin_02           6

스크립트는 다음과 같습니다. 제안 후 다음 출력을 스크립트에 저장하면 보고 싶은 출력이 나오는데 원본과 열에는 여전히 표시되지 않습니다.

출력은 아래와 같습니다.

Nitin SBC:~ # cat /root/Nick.csv | more
Registration ID Ongoing Calls
  Nitin_03 26
  Nitin_01 0

암호:

ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
{ date '+%F %T'; 
  "$ipath"/cli iedge list |
     awk 'BEGIN { print "Registration ID", "Ongoing Calls"}
        /Registration ID/ { id = $3; next }
        /Ongoing Calls/ { print id, $3 }'
} >> "$ifile"`

cli iedge list이 명령은 스위치에 구성된 모든 엔드포인트에 대한 정보를 얻는 데 도움이 됩니다.

누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

이 시도:

ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
{ date '+%F %T'; 
  "$ipath"/cli iedge list |
    awk -v OFS='\t' \
      'BEGIN { print "Registration ID", "Ongoing Calls"}
       /Registration ID/ { id = $3; next }
       /Ongoing Calls/ { print id, $3 }'
} >> "$ifile"

답변2

사용하고 싶다면 grep다음과 같이 할 수 있습니다.

paste <(cat input.txt | grep -oP "Registration ID\s+\K.+") <(cat input.txt | grep -oP "Ongoing Calls\s+\K.+")

이는 출력을 cli iedge list일부 input.txt파일에 저장한다고 가정합니다.

답변3

탭과 파이프를 출력하도록 awk 스크립트 수정column -t -s<TAB>

ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
{ date '+%F %T'; 
  "$ipath"/cli iedge list |
     awk 'BEGIN {OFS="\t"; print "Registration ID", "Ongoing Calls" }
        /Registration ID/ { id = $3; next }
        /Ongoing Calls/ { print id, $3 }' |
     column -t -s$'\t'
}  >> "$ifile"`

출력은 다음과 같습니다:

2015-06-03 11:11:33
Registration ID      Ongoing Calls
Nitin_01             9
Nitin_02             6

관련 정보