awk num函数错误

时间:2017-11-10 10:04:52

标签: shell awk gawk

我正在尝试执行3命令并将输出作为变量获取,需要进行一些百分比计算并显示与示例相同的内容。这可以作为脚本执行。

我无法将数据保存在执行命令的主机上,我的脚本将位于本地系统上,该系统将在远程主机上执行并将数据刷回本地计算机。是否有任何可能的方法来完成这项任务。

第一个命令输出

$ isi status -q | grep -e "^Size" -e "^Used" -e "^Avail"
Size:573T
Used:448.0T
Avail:74T

第二个命令输出

$ isi_classic snapshot usage | tail -n 1 | awk '{printf "\t\t\tSnapshot USED %=%.1f%%\n", $4}'
     Snapshot USED =0.6%
$ isi_classic snapshot usage | tail -n -1 | awk '{ print "\t\t\tSnapshot USED:" $1}'
     Snapshot USED=3.2T

示例脚本awk脚本无法正常工作。删除空格后

# isi status -q | grep -e "^Size" -e "^Used" -e "^Avail" | awk 'function print (num)
pipe pipe quote> /Size:/ {TotalSize=$NF~}
pipe pipe quote> /Used:/ {TotalUsed=$NF}
pipe pipe quote> /Avail:/ {TotalAvail=$NF} }
pipe pipe quote> END {
pipe pipe quote>     used=TotalUsed/Total_Size*100
pipe pipe quote>     system("isi_classic snapshot usage | tail -n -1 | awk '{ print "Snapshot_used=" $1}'")
pipe pipe quote>     system("isi_classic snapshot usage | tail -n 1 | awk '{printf "Snapshot_per :%.1f\n", $4}'")
pipe pipe quote>     Usedw/o=Total Used-Snapshot USED/Total Size
pipe pipe quote>     print hostname ": " "\t","Total Size:" Total_Size
pipe pipe quote>     printf "\t\t\tTotalUsed:%.1f\n", TotalUsed, "TB"
pipe pipe quote>     printf "\t\t\tTotalAvail:%.1f\n", TotalAvail, "TB"
pipe pipe quote>     printf "\t\t\tTotalUsed %:%.1f\n", used, "TB"
pipe pipe quote>     printf "\t\t\tSnapshot Used :%.1f\n", Snapshot_used, "TB"
pipe pipe quote>     printf "\t\t\tSnapshot Used %:%.1f\n", Snapshot_per, "TB"
pipe pipe quote>     printf "\t\t\tUsed w/o:%.1f\n", Usedw/o, TB)'
awk: syntax error at source line 1
 context is
        function >>>  print <<<  (num)
        missing }
        missing )
awk: bailing out at source line 7

样品要求

Total Size      : 573 TB
Total Used      : 448.0 TB
Total Available : 74 TB
Total Used %    : 86.1 %   # Total Used(%) = Total Used/Total Size *100 = 86.1(%)
Snapshot Used   : 3.2 TB
Snapshot Used % : 0.6 %
Used w/o        : 85.5 %    # {(Total used)-(Snapshot used)} / (Total size) = 85.49%

1 个答案:

答案 0 :(得分:0)

我相信你的awk代码存在一些语法问题。如果您坚持使用shell + awk

,这是一个开始

使用':'作为IFS('-F:')

将stdin(尾随' - ')的输入存储在由键标签索引的数组中,例如大小

$ NF + 0让awk摆脱讨厌的尾随'T'**要知道如果单位改变(即到G)你需要该信息来规范化

    [stdin] | awk -F\: '{a[$1]=($NF+0)} END{ ... grind stats here ...}' -