2012-09-10 3 views
4

AWK를 배우고 있습니다. 다음은 문자열을 배열로 분할하여 반복하는 간단한 코드 조각입니다. 내가 for (i in a)에 문의 변경이 잘 작동하는지, 그러나AWK 오류 : 스칼라 컨텍스트에서 배열을 사용하려고 시도했습니다.

awk: awk.txt:4: fatal: attempt to use array `a' in a scalar context

:이 코드를 실행하기에

BEGIN { 
    split("a,b,c", a, ","); 

    for(i = 1; i <= length(a); i++) { 
    print a[i]; 
    } 
} 

, 나는 다음과 같은 오류가 발생합니다. Google 검색을 통해 이것이 무엇을 의미하는지 더 깊이 이해하기 위해 많은 포럼 (예 : [1])이 awk bugs에 대해 얘기합니다. AWK 전문가가 오류 메시지의 의미를 이해하는 데 도움이 될 수 있다면 좋을 것입니다.

답변

5

length은 문자열 인수가 필요합니다. 배열을 전달하고 있습니다. 오류 메시지는 스칼라가 예상되는 배열을 사용하고 있음을 알려줍니다.

+0

오류 메시지의 의미를 설명해 주셔서 감사합니다. – vk239

3
BEGIN { 
    count = split("a,b,c", a, ","); 

    for(i = 1; i <= count; i++) { 
    print a[i]; 
    } 
} 

또한, AWK의 내 버전 length(ARRAY) 작품 (GNU는 4.0.1을 awk가), 그러나 문서는 행동이 표준이 아닌 것을 말한다.

+1

GNU Awk 3.1.3을 사용하고 있으며 길이 (ARRAY)가 작동 할 것으로 기대하고있었습니다. AWK에 대한이 기능 비교 차트를 찾았습니다 : http://awk.freeshell.org/AwkFeatureComparison. 이것으로부터 length (array)는 GNU Awk 3.1.5부터 지원된다. – vk239

관련 문제