来自awk中嵌套for循环的bash变量

流程1

我只想在我的awk代码中使用两个for循环变量,但是不能。请帮助或指导我正确的方向。

for i in {30,60,100}; 
do 
   for j in {7,8}; 
   do 
       awk -v x=$i -v y=$j '{if ($NF <=x) print $0}' S_$i.txt > S_$i_$j.txt;
   done;
done

这是我收到的错误。

awk: fatal: cannot open file S_.txt for reading (No such file or directory). I saw this error.
埃德·莫顿

S_$i_$j.txt正在尝试访问名为的变量$i_使用S_${i}_${j}.txt代替但还要始终引用您的shell变量,因此它实际上应该是:

awk -v x="$i" -v y="$j" '{if ($NF <= x) print $0}' "S_${i}.txt" > "S_${i}_${j}.txt"

或更笨拙地:

awk -v x="$i" -v y="$j" '$NF <= x' "S_${i}.txt" > "S_${i}_${j}.txt"

并请注意,您永远不会y在awk脚本内使用,因此它可能是:

awk -v x="$i" '$NF <= x' "S_${i}.txt" > "S_${i}_${j}.txt"

但是还不清楚为什么要在每个内部循环中创建输出的2个副本。

但是,无论您做什么,几乎可以肯定,通过一次调用awk可以比在shell循环中多次调用它快得多!

您所问的问题与for loop variables in my awk codebtw绝对无关,这全是shell的基础知识。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章