2013-04-25 4 views
0

나는 KornShell (ksh) 스크립트를 사용하여 sed 표현식에 오류가 발생했습니다. 나는 100 개의 엔트리를 갖는 abc라는 이름의 파일을 가지고 있는데, 나는 abc 파일의 모든 라인에 8 번째 인자를 변수에 할당하려고한다.while 루프에서 sed 표현식의 변수 참조

나는 이와 비슷한 것을 사용했습니다.

#!/bin/ksh 
typeset -i x=1 
while read line ; do 
    var1=$(sed -n '$xp' abc.txt | awk '{print $8}') 
    print $var1 
    x="$x+1" 
done < abc.txt 
exit 

나는 줄 번호 등의 변수 x를 참조 싶지만 X 변수를 참조에 SED 표현에 오류를 얻고있다. 제발 도와주세요.

답변

2

견적이 잘못되었습니다. 작은 따옴표 안에있는 것은 축 어적 문자열입니다. 변수 보간을 원한다면 큰 따옴표를 사용해야합니다 (아주 특별한 경우에는 따옴표를 사용하지 않아도됩니다).

리팩토링하는 사람도 Awk에 사로 잡는 사람 일 수도 있습니다. 간단히,

var1=$(awk -v n="$x" 'NR==n{ print $8 }' abc.txt) 

그러나 단 하나의 라인을 얻기 위해 전체 파일을 다시 읽는 주 루프는 매우 비효율적입니다. 어쩌면 너는 무언가를 원할거야

awk '{ print NR, $8 }' abc.txt | 
while read x var1; do 
    print "$var1" 
    # presumably do something with $x too? 
done