如何循环使用bash设置的两个文件?

时间:2015-10-16 20:36:17

标签: bash loops

我有两组文件。让我们说10个文件。我正在尝试按顺序访问两个文件。他们总是应该成对。

#p1.01 p1.02 ... p1.05
#p2.01 p2.02 ... p2.05

for i j in p1.* and p2.*
do
    script.pl -input1 $i -input2 $j
    # this will be
    # script.pl -input1 p1.01 -input2 p2.01
    # script.pl -input1 p1.02 -input2 p2.02
    # and so on until 5 pairs
done

4 个答案:

答案 0 :(得分:2)

如果您使用bash 4或更高版本:

for suffix in {01..05}; do
    script.pl -input1 p1.$suffix -input2 p2.$suffix
done

在早期版本中,您必须自己处理前导零。例如,

# Instead of {01..15}
for suffix in 0{1..9} 1{0..5}; do
    script.pl -input1 p1.$suffix -input2 p2.$suffix
done

答案 1 :(得分:1)

如果这些对总是具有匹配的后缀,就像你的例子一样,你可以这样做:

A

答案 2 :(得分:1)

你实际上可以这样做:

${f#p1.}

p1.将从我们在p1.*循环中迭代的每个for文件名的开头删除p2.${f#p1.}p2.将使用{{1}创建该文件名前缀。

答案 3 :(得分:0)

另一种解决方案,使用ij变量

ls p* | sort -t"." -k2n -k1 | paste - - | 
while read i j; do 
  script.pl -input1 "$i" -input2 "$j"; 
done

来自ls p* | sort -t"." -k2n -k1 | paste - -

p1.01 p2.01
p1.02 p2.02
... 
p1.05 p2.05