2013-08-13 2 views
3

다음은 my bash 스크립트입니다. awk에서 비교하기 위해 varible oid를 사용하면 일치하는 행이 표시되지 않습니다.비교에서 변수를 사용할 때 awk가 bash 스크립트에서 작동하지 않습니다.

oid="3586302804992" 
SYMBOL_CSV_FILE="symbol/BAC" 
awk -F, '$5 == $oid' "$SYMBOL_CSV_FILE" 
echo "2nd" 
awk -F, '$5 == "3586302804992"' "$SYMBOL_CSV_FILE" 

O는/P는

2nd 
BAC,1,O,1,3586302804992 

symbol/BAK 파일의 내용이,

BAC,1,O,1,3586302804992o 

가 3 줄에, 약 $ OID ""가하고 있습니다 어떤 차이가 나던입니다.

+1

는'awk' 스크립트 내부 bash는 변수를 사용하기를, 그것들을'-v'로 "전달"해야합니다. 예를 들어'num = 3; awk -v n = $ num 'BEGIN {print n}''. AWK 같은 – fedorqui

답변

5

awk -F "," -v oid="$oid" '$5 == oid' "$SYMBOL_CSV_FILE" 
+0

감사합니다, 올바른 방법으로 일했습니다. @Anubhava : 변수를 전달하는 메커니즘이 awk에 어떤 특별한 이유가 있습니까? –

+0

예'-v'는 쉘에서 awk로 변수를 전달하는 표준 방법입니다. 이 변수는 표준 awk 변수가되고 awk 스크립트 안에'$ '를 쓰지 않고도 사용할 수 있습니다. – anubhava

1

bash에서 변수를 해석하려면 큰 따옴표를 사용해야합니다. 작은 따옴표는 프로그램에 그대로 $oid을 전송합니다. 그런 다음

$5도 해석 될 것이다, 당신은 싶지 않아! $을 탈출해야합니다. 결국

, 당신은이 :

awk -F, '$5 == $oid' "$SYMBOL_CSV_FILE" 

은 다음과 같이 사용 : 대신

awk -F, "\$5 == $oid" "$SYMBOL_CSV_FILE" 
     ^^  ^
+0

주는 에러 == 3,586,302,804,992 AWK^구문 오류 BAC 2, 1, O, $ 5의 탈출 고정 rahul.deshmukhpatil @ 1,3586302804992 –

+0

. 이것을 지적 해 주셔서 감사합니다. –

+0

감사합니다. $ 5를 벗어났습니다. –

관련 문제