在bash中为和awk

在bash中为和awk,bash,awk,Bash,Awk,我在bash中遇到了一些与awk结合的for循环问题;我在Ubuntu 14.04中运行它。这是我正在写的剧本: #!/bin/bash L=99; for j in 1 2 3 do awk -v J=$j ' BEGIN {active=0} /Sweep 6/ {active=1} /Energy/ { a=substr($6,1,length($6)-1); if ((active) && (a==J)) { getline; g

我在bash中遇到了一些与awk结合的for循环问题;我在Ubuntu 14.04中运行它。这是我正在写的剧本:

#!/bin/bash

L=99;

for j in 1 2 3
do

 awk -v J=$j '

  BEGIN {active=0}
  /Sweep 6/ {active=1}
  /Energy/ {
  a=substr($6,1,length($6)-1);
  if ((active) && (a==J)) {
   getline;
   getline;
   getline;
   print a+1, $5
  }
 }
'

done
没有输入我正在处理的文本文件的细节,脚本所做的只是运行j=1的循环,而不是j=1、2和3。问题在哪里

提前谢谢

您的命令很好:

~$ cat >myfile
a
b
~$ for j in 1 2 3; do awk -v J=$j '{print J}' myfile; done
1
1
2
2
3
3

我看到的唯一缺失是awk应该解析的文件名。

我能看到的唯一错误是每次循环运行时都要重新打开该文件,stdin到循环或整个脚本将不起作用

如果文件很小且无法重绕,可以将其存储在bash变量中

content="`cat`"
for j in 1 2 3
do
    echo "$content" |  awk 'etc...'
done

在awk之前和之后尝试使用
echo“j=$j”
进行一些调试。谢谢,现在它可以工作了!我是从命令行传递文件名的,但似乎是错误的方式。