리눅스 awk 프로그램 코드가 이해가 안갑니다.
글쓴이: 익명 사용자 / 작성시간: 화, 2019/06/11 - 6:15오후
BEGIN { FS="[^a-zA-Z]+" } { for (i=1; i<=NF; i++) words[tolower($i)]++ } END { for (i in words) print i, words[i] }
필드 구분자를 알파벳을 제외한다는 거 같은데 +가 붙은 이유와
첫 번째 for문에서 words[tolower($i)]++ 이 부분이 잘 이해가 가지 않습니다. tolower함수?가 전달받은 인수를 소문자로 하는 것은 알겠는데 words라는 배열이 선언 없이 쓰이는 것도 이상하고 []안에 스트링을 적고 1을 증가시킨다는 것이...이해가 안갑니다.
Forums:
awk 의 필드구분자는 정규식을 쓸 수 있어서, +는
awk 의 필드구분자는 정규식을 쓸 수 있어서, +는 "한 번 이상 반복"을 의미합니다.
저 코드의 FS는 "영문자 알파벳을 제외한 문자가 한 번 이상 반복되는 형태의 문자열"을 의미하게 되지요.
awk에서는 배열을 쓰려고 미리 선언하지 않아도 됩니다.
awk의 배열은 연관배열(associative array)라서 인덱스가 숫자가 아니라 문자열입니다.
결과적으로 저 코드는 어떤 영단어가 몇 번 등장하는지 카운트를 하겠네요.
좋은 하루 되세요!
댓글 달기