use*_*287 5 variables bash awk loops for-loop
我有一个关于在Bash中循环的问题我想运行特定范围的awk命令增加34但我不知道如何在for循环中指定两个变量.我知道如何为一个变量做这个,但它不适用于两个变量.这是我的一个变量的代码:
#!/bin/bash
for a in {1..3400..34}
do
printf "awk 'NR>=$a&&NR<=$b { if (/^[0-9]/) sum++} END {print "row\t", sum }' file "
done
Run Code Online (Sandbox Code Playgroud)
但我想指定两个变量($ a,$ b),这样的东西不起作用!:
for a in {1..3400..34} , for b in {35..3400..34}
do
printf "awk 'NR>=$a&&NR<=$b { if (/^[0-9]/) sum++} END {print "row\t", sum }' hydr_dE.txt && "
done
Run Code Online (Sandbox Code Playgroud)
谢谢,
使用C风格的循环:
for ((a=1,b=35;a<=3400,b<=3400;a+=34,b+=34)); do
echo ": $a :: $b :"
done
Run Code Online (Sandbox Code Playgroud)
(将与devnull的答案具有相同的输出,但在纯Bash中).
当然,在这个简单的例子中,它就足以做到:
for ((a=1;b=a+34,b<=3400;a+=34)); do
echo ": $a :: $b :"
done
Run Code Online (Sandbox Code Playgroud)
我相信你能够弄清楚如何根据你想要的东西进行调整.
(1) 如果您需要循环两个变量,您可能希望确保它们包含相同数量的数据。 echo {1..3400..34}
会产生比 多一个的值echo {35..3400..34}
。
(2) 假设两个输入的大小相同,您可以使用循环while
:
while read a b; do
echo ": $a :: $b :";
# do something with a and b here
done < <(paste <(seq 1 34 3400) <(seq 35 34 3434))
Run Code Online (Sandbox Code Playgroud)
(您也可以使用具有大小不等的两个输入的循环,但这可能是您不想要的。在上面的示例中,变量a
将消耗较长的输入。)
这种<(command)
形式被称为过程替代。
归档时间: |
|
查看次数: |
225 次 |
最近记录: |