awk에서 배열 삭제


18

awk에서 루프로 배열을 지우면 빈 배열이됩니다. 이는 배열을 삭제하는 것과 같습니다.

for (key in array) delete array[key];

더 간단한 방법이 있습니까? 변수 이름을 스칼라에 재사용 할 수 있도록 배열을 완전히 삭제할 수 있습니까?

답변:


29

문법

delete array

POSIX의 현재 버전은 아니지만 거의 모든 기존 구현 (원래 awk, GNU, mawk 및 BusyBox 포함)에서 지원됩니다. POSIX의 향후 버전에 추가 될 예정입니다 ( 결함 0000544 참조 ).

이식 가능하고 표준을 준수하며 명령문이 아닌 표현식 인 모든 배열 요소를 지우는 다른 방법은 split기존 요소를 모두 삭제하는 것입니다.

split("", array, ":")

를 포함하여 이러한 모든 delete array변수는 변수를 원래 awk, GNU awk 및 mawk (BusyBox awk가 아닌)의 배열 변수로 표시합니다. 내가 아는 한 변수가 배열로 사용되면 스칼라 변수로 사용할 방법이 없습니다.


대체 분할 솔루션이 도움이되었습니다. delete array매뉴얼 페이지에 아래 첨자가 선택적이지만 SCO Openserver 5.0.7 awk가 구문 오류를 호출한다는 사실은 놀랍습니다 . 오류로 표시되지는 않았지만 작동하지 않았으며 여러 변형 이 모두 동일하게 효과 가 없다는 $ awk 'BEGIN { A[1] = 0; delete A; }' awk: Syntax error at line 1 of program << BEGIN { A[1] = 0; de ... >> context is BEGIN { A[1] = 0; delete >>> A; <<< awk: illegal statement at line 1 of program << BEGIN { A[1] = 0; de ... >>것을 발견하는 것이 더 놀라운 일이었습니다 . delete array[subscript]array[subscript] = ""
kbulgrien

1
또는 그냥split("", array)
Ryenus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.