我有一个文本文件,我需要从同一文本中获取2个变量并将它们放在一个命令中,如
for i in `cat TEXT | grep -i UID | awk '{print($2)}'` &&
x in `cat TEXT | grep -i LOGICAL | awk '{print($4)}'`
do
echo "naviseccli -h 10.1.1.37 sancopy -create -incremental -name copy_$i -srcwwn $x -destwwn xxxxxxxxxxxxxxxxxxxxxx -verify -linkbw 2048" >> OUTPUT
done
是否有任何可能的方法来实现存储管理员并需要做大量的命令,所以我需要让这个脚本来做它
答案 0 :(得分:1)
您可以使用文件描述符。此外,您的cat
,grep
,awk
命令可以合并为一个awk
命令:
exec 5< <(awk '{IGNORECASE=1}/UID/ {print $2}' TEXT)
exec 6< <(awk '{IGNORECASE=1}/LOGICAL/ {print $4}' TEXT)
while read i <&5 && read x <&6
do
echo command $i $x # Do something with i and x here!
done
答案 1 :(得分:0)
首先执行cat
操作并将结果保存到两个数组中。然后,您可以使用一个数组上的索引进行迭代,并使用相同的索引来访问另一个数组。
请参阅关于bash中数组的http://tldp.org/LDP/abs/html/arrays.html。特别参见“示例27-5。将脚本内容加载到数组中”部分。
使用该资源,您既可以填充数组,也可以处理它们。
答案 2 :(得分:0)
由于你的单词中没有空格(通过使用awk
),你可以使用:
paste <(grep -i UID TEXT | awk '{print($2)}') \
<(grep -i LOGICAL TEXT | awk '{print($4)}') |
while read i x
do
echo "naviseccli -h 10.1.1.37 sancopy -create -incremental -name copy_$i -srcwwn" \
"$x -destwwn xxxxxxxxxxxxxxxxxxxxxx -verify -linkbw 2048" >> OUTPUT
done
这使用Process Substitution为paste
提供两个拼凑在一起的文件。每一行都有两个字段,可以读入i
和x
,以便在循环体中使用。
请注意,无需使用cat
;您有资格获得UUOC(无用cat
)奖。
答案 3 :(得分:0)
Imma误以为UID
和LOGICAL
必须位于您的传入TEXT
的同一行,在这种情况下,这实际上可能会有所帮助并且有效:
cat TEST | awk '/LOGICAL/ && /UID/ { print $2, $4 }' | while read i x
do
echo "naviseccli -h 10.1.1.37 sancopy -create -incremental -name copy_$i -srcwwn" \
"$x -destwwn xxxxxxxxxxxxxxxxxxxxxx -verify -linkbw 2048"
done