while read line do key_value_ARR[$i]=$line if [[ ${key_value_ARR[$i]} =~ "IP" ]] then old_parameter_value[$i]=cat $file_NAME | grep ${key_value_ARR[$i]} | head -1 | cut -f2 -d ">" | cut -f1 -d "<" echo "Current $line value is:${old_parameter_value[$i]}" else old_parameter_value[$i]=cat $file_NAME | grep ${key_value_ARR[$i]} | head -1 | tr -cd "[0-9]" echo "Current $line value is:${old_parameter_value[$i]}" fi ((i+=1)) done<$key_value_FILE,优化这段代码
时间: 2024-03-19 11:45:22 浏览: 111
可以将重复的命令提取出来,同时使用 awk 命令代替 grep、cut、tr 等命令,从而简化代码并提高效率。重构后的代码如下:
```bash
while read line
do
key_value_ARR[$i]=$line
if [[ ${key_value_ARR[$i]} =~ "IP" ]]
then
old_parameter_value[$i]=$(awk -F'[<>]' "/${key_value_ARR[$i]}/{print \$3;exit}" $file_NAME)
echo "Current $line value is:${old_parameter_value[$i]}"
else
old_parameter_value[$i]=$(awk -F'[<>]' "/${key_value_ARR[$i]}/{print \$2;exit}" $file_NAME | tr -cd "[0-9]")
echo "Current $line value is:${old_parameter_value[$i]}"
fi
((i+=1))
done < $key_value_FILE
```
这样做可以简化代码,提高效率,并且更加易于阅读和维护。
相关问题
while read line do key_value_ARR[$i]=$line if [[ ${key_value_ARR[$i]} =~ "IP" ]] then old_parameter_value[$i]=`cat $file_NAME | grep ${key_value_ARR[$i]} | head -1 | cut -f2 -d ">" | cut -f1 -d "<"` echo "Current $line value is:${old_parameter_value[$i]}" else old_parameter_value[$i]=`cat $file_NAME | grep ${key_value_ARR[$i]} | head -1 | tr -cd "[0-9]"` echo "Current $line value is:${old_parameter_value[$i]}" fi ((i+=1)) done<$key_value_FILE
这段代码的作用是从一个文件中读取一些键值对,然后根据键的不同类型,提取对应的值并存储到一个数组中。其中,键值对保存在文件$key_value_FILE中,每一行为一个键值对,键和值之间用">"和"<"分隔。代码中的if语句用于判断当前行中的键是"IP"还是其他类型,如果是"IP"类型则提取出值中的数字部分,否则直接提取出值。提取出来的值存储在数组$old_parameter_value中,对应的键存储在数组$key_value_ARR中。最后,代码会输出每个键值对的当前值。
for ($i = 0; $i < 50; $i++) { $data1 = "data1_" . ($i + 1); $data2 = "data2_" . ($i + 1); $data3 = "data3_" . ($i + 1); $data4 = "data4_" . ($i + 1); $data5 = "data5_" . ($i + 1); $data6 = "data6_" . ($i + 1); $time = date("Y-m-d H:i:s"); array_push($arr1, $data1); array_push($arr2, $data2); array_push($arr3, $data3); array_push($arr4, $data4); array_push($arr5, $data5); array_push($arr6, $data6); array_push($arrTime, $time); if (count($arr1) > 50) { array_shift($arr1); array_shift($arr2); array_shift($arr3); array_shift($arr4); array_shift($arr5); array_shift($arr6); array_shift($arrTime); } } 修改代码 假设要添加的数据为$r["wr1_linktime"] $r["wr0_linktime"] $r["wr1_loopback"] $r["wr0_loopback"] $r["wr1_oneway"] $r["wr0_oneway"]
可以将原来的代码修改如下:
```
for ($i = 0; $i < 50; $i++) {
$data1 = "data1_" . ($i + 1);
$data2 = "data2_" . ($i + 1);
$data3 = "data3_" . ($i + 1);
$data4 = "data4_" . ($i + 1);
$data5 = "data5_" . ($i + 1);
$data6 = "data6_" . ($i + 1);
$time = date("Y-m-d H:i:s");
array_push($arr1, $data1);
array_push($arr2, $data2);
array_push($arr3, $data3);
array_push($arr4, $data4);
array_push($arr5, $data5);
array_push($arr6, $data6);
array_push($arrTime, $time);
if (count($arr1) > 50) {
array_shift($arr1);
array_shift($arr2);
array_shift($arr3);
array_shift($arr4);
array_shift($arr5);
array_shift($arr6);
array_shift($arrTime);
}
}
// 添加新数据
$data1 = $r["wr1_linktime"];
$data2 = $r["wr0_linktime"];
$data3 = $r["wr1_loopback"];
$data4 = $r["wr0_loopback"];
$data5 = $r["wr1_oneway"];
$data6 = $r["wr0_oneway"];
$time = date("Y-m-d H:i:s");
array_push($arr1, $data1);
array_push($arr2, $data2);
array_push($arr3, $data3);
array_push($arr4, $data4);
array_push($arr5, $data5);
array_push($arr6, $data6);
array_push($arrTime, $time);
if (count($arr1) > 50) {
array_shift($arr1);
array_shift($arr2);
array_shift($arr3);
array_shift($arr4);
array_shift($arr5);
array_shift($arr6);
array_shift($arrTime);
}
```
这样就可以将新的数据添加到相应的数组中,并且保持数组长度不超过50。
阅读全文