2014-12-05 70 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