bash迭代配对数据

时间:2014-01-18 19:05:44

标签: bash loops

我有一个从bash脚本执行的程序

mydata=$(myprogram etc)

提供如下数据:

echo $mydata

foo1

bar1

foo2

bar2

...

foo_n

bar_n

我想迭代$mydata传递到另一个命令:

another_command foo1 bar1

问题:如何使用bash执行此操作?问题2:以另一种方式提供数据会大大简化事情吗?例如,如果数据如下所示:

foo1 bar1 foo2 bar2 ... foo_n bar_n

3 个答案:

答案 0 :(得分:5)

您可以使用xargs命令

 echo $mydata | xargs -n 2 another_command

例如:

 $ echo foo1 bar1 foo2 bar2 | xargs -n 2 echo PAIR
 PAIR foo1 bar1
 PAIR foo2 bar2

如果输入由空格或换行符分隔,则xargs使用默认选项无关紧要

答案 1 :(得分:2)

您可以使用此脚本:

while read a; read b; do 
   another_command "$a" "$b"
done < file

答案 2 :(得分:2)

您可以使用数组

声明数组

declare -a mydata

然后将输出保存到数组,在

之间运行命令
mydata=( $(echo -e "f1\nb1\nf2\nb2") )
       ^                             ^

for (( i=0;$i<${#mydata[*]};i+=2 ))
do
   echo ${mydata[$i]}" "${mydata[$i+1]}
done