我有两组文件。让我们说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
答案 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)
另一种解决方案,使用i
和j
变量
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