首页 > 解决方案 > 来自awk中嵌套for循环的bash变量

问题描述

我想在我的 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.

标签: bashawk

解决方案


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 code你问的问题与btw完全无关,都是shell基础。


推荐阅读