2014-12-05 68 views
0

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

#!/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.问题在哪里?

在此先感谢!

+0

尝试使用'echo“j = $ j”'在awk前后调试一下。 – 2014-12-05 10:17:47

回答

1

你的命令是好的:

~$ 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应该解析。

+0

谢谢,现在它正在工作!我从命令行传递文件名,但似乎是错误的。 – Luca 2014-12-05 10:28:29

+0

欢迎来到SO @Luca。请阅读:http://stackoverflow.com/help/someone-answers – whoan 2014-12-05 11:03:38

0

只有obvoius错误我可以看到你是在循环的每次运行中重新打开该文件,标准输入循环或整个脚本不起作用。

如果文件很小并且不能倒带,可以将它存储在bash变量中。

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