私は他の人の助けを借りて最初のシェルスクリプトを作成し、期待どおりに動作しますが、もう少し整理したいと思います。
現在のスクリプト:
{ 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
レポートは任意の形式に調整できます。