BASH:在for循环中迭代两个v变量
我有两个文件编号.txt(1\n 2\n 3\n 4\n 5\n)和alpha.txt(a\n n\n c\n d\n e\n) 现在我想同时迭代这两个文件,比如BASH:在for循环中迭代两个v变量,bash,for-loop,iteration,Bash,For Loop,Iteration,我有两个文件编号.txt(1\n 2\n 3\n 4\n 5\n)和alpha.txt(a\n n\n c\n d\n e\n) 现在我想同时迭代这两个文件,比如 for num in `cat numbers.txt` && alpha in `cat alpha.txt` do echo $num "blah" $alpha done 或者我的另一个想法是 for num in `cat numbers.txt` do for
for num in `cat numbers.txt` && alpha in `cat alpha.txt`
do
echo $num "blah" $alpha
done
或者我的另一个想法是
for num in `cat numbers.txt`
do
for alpha in `cat alpha.txt`
do
echo $num 'and' $alpha
break
done
done
但是这种代码总是取$alpha的第一个值
我希望我的问题足够清楚
提前谢谢
这就是我真正想要做的。(这只是一个例子) 我还有一个文件,比如template.txt有内容
variable1= NUMBER
variable2= ALPHA
我想从两个文件中获取输出,即numbers.txt和alpha.txt(一次从两个文件中提取一行),并想用这两个文件中各自的内容替换numbers和alpha
这就是我在了解如何将两个文件一起迭代时所做的
paste number.txt alpha.txt | while read num alpha
do
cp template.txt temp.txt
sed -i "{s/NUMBER/$num/g}" temp.txt
sed -i "{s/ALPHA/$alpha/g}" temp.txt
cat temp.txt >> final.txt
done
现在我在final.txt中看到的是:
variable1= 1
variable2= a
variable1= 2
variable2= b
variable1= 3
variable2= c
variable1= 4
variable2= d
variable1= 5
variable2= e
variable1= 6
variable2= f
variable1= 7
variable2= g
variable1= 8
variable2= h
variable1= 9
variable2= i
variable1= 10
variable2= j
这是非常简单和愚蠢的方法。我想知道有没有其他方法可以做到这一点
任何建议都将不胜感激。在第二个示例中,由于
中断,内部循环只执行一次。它将简单地跳出循环,也就是说,您将始终只获得alpha.txt
的第一个元素。因此,我认为您应该删除它:
for num in `cat numbers.txt`
do
for alpha in `cat alpha.txt`
do
echo $num 'and' $alpha
done
done
在第二个示例中,由于中断
,内部循环只执行一次。它将简单地跳出循环,也就是说,您将始终只获得alpha.txt
的第一个元素。因此,我认为您应该删除它:
for num in `cat numbers.txt`
do
for alpha in `cat alpha.txt`
do
echo $num 'and' $alpha
done
done
如果多个循环不是您的具体需求,但获取相应的行是您的需求,那么您可以尝试以下代码:
for line in `cat numbers.txt`
do
echo $line "and" $(cat alpha.txt| head -n$line | tail -n1 )
done
head
获取与line的值相等的行数,tail
获取最后一个元素。如果多个循环不是您的具体要求,但获取相应的行数是必要的,则您可以尝试以下代码:
for line in `cat numbers.txt`
do
echo $line "and" $(cat alpha.txt| head -n$line | tail -n1 )
done
head
获取与line值相等的行数,tail
获取最后一个元素。在bash中,第一个循环是不可能的。没有中断
的第二个将把numbers.txt中的每一行与alpha.txt中的每一行结合起来,如下所示:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
你的break
使它跳过alpha.txt中的所有行,除了第一行(bmk已经在他的回答中解释过了)
应该可以使用while loop结构来组织正确的循环,但这会非常难看
根据任务的具体情况,有很多更简单的选择,可能是更好的选择。例如,您可以尝试以下方法:
paste numbers.txt alpha.txt
或者,如果你真的想要你的“和”,那么,像这样的事情:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
如果你的数字真的是连续的(你可以不使用“和”),你可以简单地做:
cat -n alpha.txt
在bash中,第一个循环是不可能的。没有中断
的第二个将把numbers.txt中的每一行与alpha.txt中的每一行结合起来,如下所示:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
你的break
使它跳过alpha.txt中的所有行,除了第一行(bmk已经在他的回答中解释过了)
应该可以使用while loop结构来组织正确的循环,但这会非常难看
根据任务的具体情况,有很多更简单的选择,可能是更好的选择。例如,您可以尝试以下方法:
paste numbers.txt alpha.txt
或者,如果你真的想要你的“和”,那么,像这样的事情:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
如果你的数字真的是连续的(你可以不使用“和”),你可以简单地做:
cat -n alpha.txt
不,你的问题不够清楚。具体来说,您希望迭代文件的方式不清楚,但假设您希望有如下输出:
1 blah a
2 blah b
3 blah c
4 blah d
5 blah e
您可以使用粘贴实用程序,如下所示:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
甚至:
paste -d@ alpha num | sed 's/@/ blah /'
不,你的问题不够清楚。具体来说,您希望迭代文件的方式不清楚,但假设您希望有如下输出:
1 blah a
2 blah b
3 blah c
4 blah d
5 blah e
您可以使用粘贴实用程序,如下所示:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
甚至:
paste -d@ alpha num | sed 's/@/ blah /'
根据您建议的第一个模型,这里有一个替代解决方案:
while read -u 5 a && read -u 6 b
do
echo $a $b
done 5<numbers.txt 6<alpha.txt
read-u5a和read-u6b时
做
回声a$b
完成5根据您建议的第一个模型,这里有一个替代解决方案:
while read -u 5 a && read -u 6 b
do
echo $a $b
done 5<numbers.txt 6<alpha.txt
read-u5a和read-u6b时
做
回声a$b
tollboy,我想你想要的答案是:
count=1
for item in $(paste number.txt alpha.txt); do
if [[ "${item}" =~ [a-zA-Z] ]]; then
echo "variable${count}= ${item}" >> final.txt
elif [[ "${item}" =~ [0-9] ]]; then
echo "variable${count}= ${item}" >> final.txt
fi
count=$((count+1))
done
在控制台中键入paste number.txt alpha.txt
时,您会看到:
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
从bash的角度来看,$(paste number.txt alpha.txt)
它看起来是这样的:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
因此,对于该列表中的每个项目,找出它是字母还是数字,并将其打印到输出文件中
最后,增加计数。@tollboy,我想你想要的答案是:
count=1
for item in $(paste number.txt alpha.txt); do
if [[ "${item}" =~ [a-zA-Z] ]]; then
echo "variable${count}= ${item}" >> final.txt
elif [[ "${item}" =~ [0-9] ]]; then
echo "variable${count}= ${item}" >> final.txt
fi
count=$((count+1))
done
在控制台中键入paste number.txt alpha.txt
时,您会看到:
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
从bash的角度来看,$(paste number.txt alpha.txt)
它看起来是这样的:
1 AND a
1 AND n
1 AND c
...
2 AND a
...
3 AND a
...
4 AND a
...
paste numbers.txt alpha.txt | sed 's/\t/ AND /'
paste number.txt alpha.txt | while read alpha num ; do
echo "$num and $alpha"
done
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j
因此,对于该列表中的每个项目,找出它是字母还是数字,并将其打印到输出文件中
最后,增加计数。这将输出“1和a”、“1和n”、“1和c”。。。“2和a”。。。我想,@ask想要“1和a”,“2和n”,“3和c”…@亚历克西斯:那样的话,我想你的答案更好。但至少我解释了为什么只考虑了alpha.txt
的第一个值……这并不能解决问题。它将为$num的每个值迭代$alpha。这将输出“1和a”、“1和n”、“1和c”。。。“2和a”。。。我想,@ask想要“1和a”,“2和n”,“3和c”…@亚历克西斯:那样的话,我想你的答案更好。但至少我解释了为什么只考虑了alpha.txt
的第一个值……这并不能解决问题。它将对$num的每一个值迭代$alpha。我希望您的问题更清楚。。什么