https://jherrlin.github.io/posts/learn-awk/ ์ด ๊ณณ์ ๊ธ์ ์ฎ๊ธด๋ค. ์ฝ๊ฐ ์์ ํ ์๋ ์๋ค.
(Herrlin [2020] 2022)
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
๋ ธํธ ํ์ผ ๋ฐ ํ๋์ ์นด๋์ ํจ๊ป ๋ ๊ฐ์ ํ ์คํธ ํ์ผ์ด ์์ต๋๋ค. ํ ์คํธ ํ์ผ์ "์ ๋ช ํ" ํ์ผ์ ์์ ๋๋ค. ๋ ธํธ๋ถ ํ์ผ์๋ ๊ฐ ํ์ผ์ ๋ํ ์กฐ์ง ๋ชจ๋ ์์ค ๋ธ๋ก์ด ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๋ฌธ์ ํน์ ์ง๋ฌธ์ ์ฌ์ฉํ ์์ค ๋ธ๋ก์ ๋ํ๋ ๋๋ค.
๋ ธํธ๋ถ ํ์ผ ๋ด๋ถ์ ์์ค ๋ธ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ๊ฐํ ์ธ์ด๊ฐ 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 ์ ๋ค์์ ์ง๋ฌธ์ด ๋ํ๋ ๋ ์ง๋ฅผ ์ค์ ํฉ๋๋ค.
๋ค์์ ํ๋์ ์นด๋๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ํ ์์ ๋๋ค. ์กฐ์ง ๋ชจ๋์ ๊ธฐ๋ณธ์ ์๊ณ ์๋ค๋ฉด ์ด ๊ตฌ์กฐ๊ฐ ๋งค์ฐ ์น์ํ๊ฒ ๋๊ปด์ง ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ํ ๊ฐ์ง ํฐ ์ด์ ์ ๊ทธ๊ฒ์ด ๋จ์ง ํ ์คํธ๋ผ๋ ๊ฒ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด์ํ ๋ฌผ๊ฑด์ด ์์ต๋๋ค. ๊ฒ์ํ๊ธฐ ์ฝ๊ณ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ฌ์ด ์ผ๋ฐ ํ ์คํธ์ ๋๋ค.
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
์ธ์ด ํ์ต์ ์ํ ์ด๋ฐ ์ข ๋ฅ์ ์ค์ ์ ์ ์๊ฒ ๋งค์ฐ ๋งค๋ ฅ์ ์ผ๋ก ๋๊ปด์ง๋๋ค. ๋ฏธ๋ฆฌ ์ ์๋ ํ ์คํธ ํ์ผ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ AWK ํ๋ก๊ทธ๋จ์ด ์งง๊ณ ํจ์จ์ ์ผ ์ ์์ผ๋ฏ๋ก AWK ๊ฐ ๋ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๊ฒ์๋ฌผ์ ์์ฑํ ๋ ๋๋ ์ํฌํ๋ก์ฐ๋ฅผ ๋ง ๋๋ด๊ณ ๋ชจ๋ ์กฐ๊ฐ์ ๋ชจ์์ต๋๋ค. ์ด์ ์ข์ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ผ๋ก ๋ ๋ฒ์งธ ๋๋๋ฅผ ์ฑ์ฐ๊ณ ํ๋ณตํ AWK ์ฌ์ฉ์๊ฐ ๋๊ธฐ ์ํ ๊ธธ์ ๊ณ์ํ ๋์ ๋๋ค. ์์ ํ๋ฆ์ ์ต์ ํํ๊ฑฐ๋ ์ข์ ํ๋์ ์นด๋๋ก ๊ธฐ์ฌํ๋ ๋ฐ ๋์์ ์ฃผ๊ณ ์ถ๋ค๋ฉด GitHub ๋ฅผ ํตํด ํ ์์ฒญ์ ๋ฐ๊ฑฐ๋ Twitter ๋ฅผ ํตํด ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ด ๊ธฐ์ฉ๋๋ค.
#Backlink
Related-Notes
References
Herrlin, John. (2020) 2022. โLearn the AWK Programming Language with Emacs Org-drill #Awk.โ https://github.com/jherrlin/learn-awk.