bash - 来自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.
解决方案
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基础。
推荐阅读
- sql-server - 使用 SQL 的 CONVERT(binary, ?) 和 Laravel 的 whereRaw
- r - 如何计算 8 小时的平均值?(非运行平均值)
- java - 如果本地数据中心在 Cassandra 中关闭,如何实现 Quorum 一致性?
- spring - Spring WebSocket 和服务会话范围的属性
- node.js - Heroku Login 无法验证第一个证书 vscode/nodejs
- python - 如何根据熊猫数据框中另一列的条件将值保持在百分位以上
- c# - Alea GPU 可用内存
- angular - ng build 溢出很多错误...无法启动我的应用程序
- python - 如何将 TGA 文件格式转为 DDS 格式?
- linux - 如何识别内核版本