while read line; do while read line1; do $line | grep $line1; done < <(echo "opt;Mem" ';' '\n');done < <(echo "df -k;free -b" | tr ';' '\n')我用过这个,但它与发送所有第二个变量是一样的
我的需求是运行一些命令集(用;分隔),并用期望的输出(用;分隔)来grep它
我使用下面的命令:
while read line
do while read line1
do $line | grep $line1
break
done < <(echo "m;Mem" | tr ';' '\n')
done < <(echo "df -kh;free" | tr ';' '\n')我正在寻找的输出:
df -kH | grep m
free | grep mem发布于 2019-09-18 21:55:21
您不能使用嵌套循环来并行迭代两个集合,因为正如您已经注意到的那样,这会导致对一个集合的每一项迭代另一个集合的每一项(当您只需要n次迭代时,n*n次迭代)。
您需要使用单个循环,在此循环中,您将一次迭代两个集合。使用两个字符串创建数组将帮助您做到这一点:
commands="df -kh
free"
patterns="m
Mem"
readarray -t commands_array <<<"$commands"
readarray -t patterns_array <<<"$patterns"
for ((index=0; index<${#commands_array[@]}; index++)); do
echo "${commands_array[index]} | grep ${patterns_array[index]}"
done你可以使用try it here。
如果需要处理;-separated命令和模式,可以使用以下命令:
commands="df -kh;free"
patterns="m;Mem"
readarray -d';' -t commands_array < <(echo -n "$commands")
readarray -d';' -t patterns_array < <(echo -n "$patterns")
#[...]你可以使用try it here。
https://stackoverflow.com/questions/57986449
复制相似问题