让我先说一下我是一个完整的脚本新手。
我们有许多管理不当的配额文件,需要更新其总计。我希望有一个脚本可以计算每个卷的总数,而不是每月机械地计算。请参阅下面的示例。
我们的配额文件如下所示:
/vol/vol1/NStorage1 tree 200G
/vol/vol1/NStorage2 tree 5G
/vol/vol1/NStorage3 tree 300G
/vol/vol1/NStorage4 tree 145G
/vol/vol1/NStorage5 tree 3G
/vol/vol1/NStorage6 tree 5G
#
# vol1 total 700GB
/vol/vol2/NStorage7 tree 20G
/vol/vol2/NStorage8 tree 1G
/vol/vol2/NStorage9 tree 30G
/vol/vol2/NStorage10 tree 55G
/vol/vol2/NStorage11 tree 25G
/vol/vol2/NStorage12 tree 430G
/vol/vol2/NStorage13 tree 20G
#
# vol2 total 550GB
依旧......
我要做的是从第3列获取总和,并将其添加到“volX total #### GB”行。
我曾尝试使用AWK,但它只会执行该列的第一部分,而我不知道如何让它替换每列的总数。
awk '{ sum += $3 } END { print sum }' < file
非常感谢任何帮助。
答案 0 :(得分:1)
如果文件中的单位始终为GB
,则可以使用以下行:
awk '!/^#/{s+=$3+0;print;next}NF>1{$NF=$NF+s"GB";s=0}7' file
使用您的输入示例,它将输出:
/vol/vol1/NStorage1 tree 200G
/vol/vol1/NStorage2 tree 5G
/vol/vol1/NStorage3 tree 300G
/vol/vol1/NStorage4 tree 145G
/vol/vol1/NStorage5 tree 3G
/vol/vol1/NStorage6 tree 5G
#
# vol1 total 1358GB
/vol/vol2/NStorage7 tree 20G
/vol/vol2/NStorage8 tree 1G
/vol/vol2/NStorage9 tree 30G
/vol/vol2/NStorage10 tree 55G
/vol/vol2/NStorage11 tree 25G
/vol/vol2/NStorage12 tree 430G
/vol/vol2/NStorage13 tree 20G
#
# vol2 total 1131GB
如果您希望总和替换 total
值,而不是add to
,只需:
awk '!/^#/{s+=$3+0;print;next}NF>1{$NF=s"GB";s=0}7' file