방금 다른 사람의 도움을 받아 첫 번째 쉘 스크립트를 만들었고 예상대로 작동하지만 좀 더 정리하고 싶습니다.
현재 스크립트:
{ 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"
출력:
- Registration ID Ongoing Calls
- Nitin_03 30
- Nitin_01 0
대신 출력 형식을 다음과 같이 지정하고 싶습니다.
-------------------------------------
|Registration ID | Ongoing Calls |
-------------------------------------
| Nitin_03 | 30 |
-------------------------------------
| Nitin_01 | 0 |
-------------------------------------
어떻게 해야 하나요? 다음을 시도했는데 대부분 작동하지만 다른 "문자"를 추가하면 치명적인 오류가 발생합니다.
ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
"$ipath"/cli igrp list | awk '
BEGIN { print "------------------------------------";
printf "|%-17s|%-16s|%-15s|\n","Iedge Group", "maxCallsIn"
"maxCallsOut"
}
/Iedge Group/ { id = $3; next }
/maxCallsIn/
/maxCallsOut/{print "------------------------------------"; printf
"|%-17s|%-16s|%-15s\n",id,$3 }
END{
print "------------------------------------";
}'
다음을 추가했을 때 이 오류가 발생하기 시작했습니다 maxCallsOut
.
awk: cmd. line:3: fatal: not enough arguments to satisfy format string
`|%-17s|%-16s|%-15s|
'
^ ran out for this one
답변1
awk에서 형식화된 출력을 얻으려면 다음을 사용하십시오 printf
.
$ "$ipath"/cli iedge list | awk 'BEGIN { print "------------------------------------"; printf "|%-17s|%-16s|\n","Registration ID", "Ongoing Calls"} /Registration ID/ { id = $3; next } /Ongoing Calls/ {print "------------------------------------"; printf "|%-17s|%-16s|\n",id,$3 } END{print "------------------------------------";}'
------------------------------------
|Registration ID |Ongoing Calls |
------------------------------------
|Nitin_03 |30 |
------------------------------------
|Nitin_01 |0 |
------------------------------------
읽기가 더 쉽다면 다음은 동일하지만 스크립트의 여러 줄에 걸쳐 분산되어 있습니다.
#!/bin/sh
"$ipath"/cli iedge list | awk '
BEGIN { print "------------------------------------";
printf "|%-17s|%-16s|\n","Registration ID", "Ongoing Calls"
}
/Registration ID/ { id = $3; next }
/Ongoing Calls/ {print "------------------------------------"; printf "|%-17s|%-16s|\n",id,$3 }
END{
print "------------------------------------";
}
'
printf
보고서는 원하는 형식으로 조정할 수 있습니다.