bash 逐行读取 table 的脚本
bash script to read table line by line
示例输入:(table 格式的制表符分隔值)
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
vs1 vol1 aggr1 online RW 2GB 1.9GB 5%
vs1 vol1_dr aggr0_dp online DP 200GB 160.0GB 20%
vs1 vol2 aggr0 online RW 150GB 110.3GB 26%
vs1 vol2_dr aggr0_dp online DP 150GB 110.3GB 26%
vs1 vol3 aggr1 online RW 150GB 120.0GB 20%
我的任务是查找聚合下已超出阈值的卷,以便将它们移动到不同的聚合。
需要你的帮助逐行阅读上面的 table,捕获与特定聚合名称关联的卷(将作为参数传递)并将卷的大小添加到变量(比如总计)。应读取下一行,直到变量总计小于或等于应移动的大小(再次将其作为参数传递)
<aggr1>
和 <152GB>
作为参数传递时的预期输出
vol1 aggr1 2GB
vol3 aggr1 150GB
您想逐行读取文件,所以可以使用awk。您使用语法 -v aggr=<aggr>
给出参数。您将在命令行中输入:
awk -f script.awk -v aggr=aggr1 -v total=152 tabfile
这是一个 awk 脚本:
BEGIN {
if ( (aggr == "") || (total == 0.) ) {
print "no <aggr> or no <total> arg\n"
print "usage: awk -f script.awk -v aggr=<aggr> -v total=<total> <file_data>"
exit 1;}
sum = 0;
}
[=11=] ~ aggr {
scurrent = ; sub("GB","", scurrent);
sum += scurrent;
if (sum <= total) print "\t" "\t" ;
else exit 0;
}
BEGIN 块在开头被解释一次!此处初始化 sum 变量并检查是否存在强制参数。如果它们缺失,则它们的值为 null。
脚本将逐行读取文件,并且只处理包含 aggr 参数的行。
每一列都由 $ 及其 NUM 引用;您的卷大小在
.
列中
示例输入:(table 格式的制表符分隔值)
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
vs1 vol1 aggr1 online RW 2GB 1.9GB 5%
vs1 vol1_dr aggr0_dp online DP 200GB 160.0GB 20%
vs1 vol2 aggr0 online RW 150GB 110.3GB 26%
vs1 vol2_dr aggr0_dp online DP 150GB 110.3GB 26%
vs1 vol3 aggr1 online RW 150GB 120.0GB 20%
我的任务是查找聚合下已超出阈值的卷,以便将它们移动到不同的聚合。 需要你的帮助逐行阅读上面的 table,捕获与特定聚合名称关联的卷(将作为参数传递)并将卷的大小添加到变量(比如总计)。应读取下一行,直到变量总计小于或等于应移动的大小(再次将其作为参数传递)
<aggr1>
和 <152GB>
作为参数传递时的预期输出
vol1 aggr1 2GB
vol3 aggr1 150GB
您想逐行读取文件,所以可以使用awk。您使用语法 -v aggr=<aggr>
给出参数。您将在命令行中输入:
awk -f script.awk -v aggr=aggr1 -v total=152 tabfile
这是一个 awk 脚本:
BEGIN {
if ( (aggr == "") || (total == 0.) ) {
print "no <aggr> or no <total> arg\n"
print "usage: awk -f script.awk -v aggr=<aggr> -v total=<total> <file_data>"
exit 1;}
sum = 0;
}
[=11=] ~ aggr {
scurrent = ; sub("GB","", scurrent);
sum += scurrent;
if (sum <= total) print "\t" "\t" ;
else exit 0;
}
BEGIN 块在开头被解释一次!此处初始化 sum 变量并检查是否存在强制参数。如果它们缺失,则它们的值为 null。
脚本将逐行读取文件,并且只处理包含 aggr 参数的行。
每一列都由 $ 及其 NUM 引用;您的卷大小在 .