2014-12-05 3 views
0

awk와 함께 bash의 for 사이클에 몇 가지 문제가 있습니다. 우분투 14.04에서 실행하고 있습니다. 이것은 내가 쓰고 있어요 스크립트입니다 : 내가 처리하고있는 텍스트 파일의 세부 사항에 입력하지 않고for 및 awk with 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

awk 전후에'echo "j = $ j"'로 약간의 디버깅을 시도하십시오. –

답변

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 

I 누락 볼 수있는 유일한 방법은 파일 이름 AWK 구문 분석해야합니다.

+0

감사합니다. 이제 작동 중입니다. 나는 커맨드 라인에서 파일 이름을 전달하고 있었지만 그것이 잘못된 방법으로 보였다. – Luca

+0

SO @ 루카에 오신 것을 환영합니다. 읽으십시오 : http://stackoverflow.com/help/someone-answers – whoan

0

내가 볼 수있는 것은 루프의 각 실행에서 파일을 다시 열 수 있다는 것입니다. 루프 또는 전체 스크립트에 대한 stdin은 작동하지 않습니다.

파일 크기가 작고 다시 감을 수 없으면 bash 변수에 저장할 수 있습니다.

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