#AWK :스크립트
2022-11-21 MetaWord awk meta scriptshttps://jherrlin.github.io/posts/learn-awk/ 이 곳의 글을 옮긴다. 약간 수정 할 수도 있다.
Intro
이 게시물은 Emacs, Org 모드 및 Org-drill 을 사용하여 AWK 프로그래밍 언어를 배우기 위한 작업 흐름을 설명합니다. 이와 같은 워크플로는 다른 프로그래밍 언어에서도 작동할 수 있습니다. 본 글은 Emacs, 조직 모드 또는 조직 드릴을 사용하는 방법에 대한 세부 정보를 다루지 않습니다. 워크플로에 대한 일반적인 개요를 제공하기 위한 것입니다. 여기에서 플래시 카드, 노트 및 일부 텍스트 파일과 함께 git repo 를 사용할 수 있습니다.
Content
방금 “The AWK 프로그래밍 언어” 책에서 몇 장을 읽었고 AWK 가 훌륭하다는 것을 알았고 언어에 대해 더 배우고 싶습니다. 나는 AWK 를 배우기 위한 나의 접근법에 대해 생각하기 시작한다. 내 목표는 더 작은 스크립트와 하나의 라이너로 AWK 를 효율적으로 사용하는 것입니다. AWK 는 Turing complete 하며 더 큰 응용 프로그램에 사용할 수 있습니다. 그러나 더 큰 응용 프로그램을 작성하는 경우 내가 선택한 무기는 변경 불가능한 데이터 구조를 가진 함수형 리스프 입니다. AWK 는 내 도구 상자의 자연스러운 툴이자 로그 필터링, 파일의 패턴 검색, 몇 개의 파일 축소, 내 회계 데이터 또는 어떤 종류의 구조를 가진 텍스트와 관련된 기타 항목을 변환하는 데 완벽한 언어라고 생각합니다. 특히, find, sed, grep 및 sort AWK 와 같은 프로그램과 함께 사용하면 매우 강력하고 효율적일 수 있습니다. 여기에서 AWK 가 빛을 발합니다.
=배움의 과정=에 대해 생각하기 시작한 한 가지 이유는 새로운 언어를 한 번에 배우고 지식을 최신 상태로 유지할 시간이 없다고 느끼기 때문입니다. 나는 천천히 그리고 시간이 지남에 따라 발전하고 싶다. 잊어버린 것이 있거나 잠시 동안 AWK 에서 떨어져 있더라도, 책을 다시 읽거나 많은 문서를 참조할 필요 없이 빠르게 정상 궤도로 돌아가고 싶습니다. 물론 이것이 완전히 가능한 것은 아니지만 AWK 의 가장 중요한 부분을 제 2 의 두뇌에 보관할 수 있다면 더할 나위 없이 기쁩니다.
내가 생각한 것은 제공된 텍스트 파일과 함께 Org-drill 및 Org 모드 소스 블록을 결합한 워크플로우입니다. Org-drill 은 플래시 카드와 함께 간격 반복 알고리즘을 사용하여 질문과 답변을 제공하는 Emacs 모드입니다. 질문과 답변은 내가 작성했으며 대부분 Nginx 액세스 로그, /etc/passwd 또는 .ledger 파일과 같은 “유명한” 텍스트 파일을 기반으로 합니다.
내 소스를 질문과 답변으로 채우는 일반적인 작업 흐름은 책의 한 장이나 설명서 페이지를 읽는 것입니다. 유용하다고 생각되는 것을 찾으면 하나 이상의 플래시 카드를 씁니다. 이렇게 하면 지식 소스를 늘릴 수 있고 시간이 좀 남았다고 느낄 때 학습 워크플로를 실행할 수 있습니다.
학습 워크플로는 다음과 같습니다.
- Open 2 Emacs sessions
- Open the file containing the flash cards in one session
- Open a note book file in the other
- Start org-drill in the flash cards session
- Write your answers in the note book session
노트 파일 및 플래시 카드와 함께 두 개의 텍스트 파일이 있습니다. 텍스트 파일은 “유명한” 파일의 예입니다. 노트북 파일에는 각 파일에 대한 조직 모드 소스 블록이 포함되어 있습니다. 그리고 질문은 특정 질문에 사용할 소스 블록을 나타냅니다.
노트북 파일 내부의 소스 블록은 다음과 같습니다.
{ print }
평가할 언어가 AWK 임을 알려줍니다. 결과는 소스 블록 바로 아래에 있는 노트 북 문서에 삽입되어야 합니다. AWK 프로그램이 입력으로 가지고 있는 파일은 :in-file 인수에 있습니다. C-c C-c 가 이 소스 블록에서 실행되면 노트북 문서에 ./text-files/access.log 파일의 모든 내용을 삽입합니다. 오류가 발생하면 오류 메시지가 문서에 삽입됩니다.
다음은 답변을 개발할 때 어떻게 보일 수 있는지에 대한 예입니다. AWK 답변을 작성하고 C-c C-c 를 사용하여 결과를 확인합니다. 만족스럽고 정답이 있다고 생각되면 org-drill 세션에 알려주시면 정답을 제공합니다. org-drill 에 1-5 점 척도에서 얼마나 잘했는지 말함으로써 자신을 바로잡습니다. 답변을 어떻게 평가하느냐에 따라 org-drill 은 다음에 질문이 나타날 날짜를 설정합니다.
{ ips[$1]+=1 }
END { for (i in ips) { print i, ips[i] | "sort -rk 2,2"}}
다음은 플래시 카드가 어떻게 보이는지에 대한 예입니다. 조직 모드의 기본을 알고 있다면 이 구조가 매우 친숙하게 느껴질 것입니다. 이것의 한 가지 큰 이점은 그것이 단지 텍스트라는 것입니다. 데이터베이스나 이상한 물건이 없습니다. 검색하기 쉽고 버전 관리가 쉬운 일반 텍스트입니다.
Print line 7 to 10 of file
How do you print line 7 to 10 with a range pattern? :in-file ./text-files/ledger.ledger
Answer
FNR==7,FNR==10
언어 학습을 위한 이런 종류의 설정은 저에게 매우 매력적으로 느껴집니다. 미리 정의된 텍스트 파일을 입력으로 사용할 수 있고 AWK 프로그램이 짧고 효율적일 수 있으므로 AWK 가 더 적합하다고 생각합니다. 이 게시물을 작성할 때 나는 워크플로우를 막 끝내고 모든 조각을 모았습니다. 이제 좋은 질문과 답변으로 두 번째 두뇌를 채우고 행복한 AWK 사용자가 되기 위한 길을 계속할 때입니다. 작업 흐름을 최적화하거나 좋은 플래시 카드로 기여하는 데 도움을 주고 싶다면 GitHub 를 통해 풀 요청을 받거나 Twitter 를 통해 피드백을 받을 수 있어 기쁩니다.