AWK의 배열 구문

AWK의 배열 구문

이 스크립트에 대한 반응이 혼란스럽습니다.

테스트 하나:

awk '{line_arr[$0] } END {for (line in line_arr) print line}' text_file

산출:

1
2
3
4

테스트 2:

awk '{line_arr[$0] } END {for (line in line_arr) print line}' text_file

산출:

is some text.
Hello. Here
Lots of random
text.

문서 내용:

$ cat text_file
Hello. Here
is some text.
Lots of random
text.

왜?색인실제 값으로 저장된 배열?

두 번째 재판에서는 왜 문제가 생겼나요?

답변1

이 드문 구문을 사용하여 awk행을연관 배열. 따라서 정의된 순서가 없습니다. 정의되지 않은 동작에 도달했습니다.

설득하는 방법은 다음과 같습니다. 연관 배열 자체의 줄 번호를 인쇄합니다.

$ awk '{line_arr[$0]=NR } END \
       {for (line in line_arr) print line_arr[line]"=>"line } \
      ' text_file

3=>Lots of random
1=>Hello. Here
4=>text.
2=>is some text.

관련 정보