๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Welcome.
:: Linux ๐Ÿšฉ/Linux_basic

[๋ฆฌ๋ˆ…์Šค] [AWK ๋ช…๋ น์–ด]

by EunBird 2021. 5. 27.

: << 'AWK COMMAND'

# AWK ์˜ ๊ธฐ๋Šฅ์„ ๋””์ž์ธ ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์ด๋‹ˆ์…œ๋กœ ๋งŒ๋“ค์–ด์ง
# A : Alfred V. [A]ho, W : Peter J. [W]einberger, K : Brian W. Kernighan
# ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ , ์„ ํƒํ•œ ๋ ˆ์ฝ”๋“œ์— ํฌํ•จ๋œ ๊ฐ’์„ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐํ™” ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง
# awk [์˜ต์…˜] [awk ํ”„๋กœ๊ทธ๋žจ] [ํŒŒ์ผ๋ช…] ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ

# ์˜ต์…˜
-F : ํ•„๋“œ ๊ตฌ๋ถ„์ž ์ง€์ •
-f : awk ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ ๊ฒฝ๋กœ ์ง€์ •
# -v : awk ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ํŠน์ • variable ๊ฐ’ ์ง€์ •

# awk ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋ณธ ๊ตฌ์กฐ
# pattern { action } ํ˜•ํƒœ => echo -e 'no\ttitle\n1\tsubject1' | awk '/sub/ { print }'
pattern์„ ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ ์šฉ๋จ => echo -e 'no\ttitle\n1\tsubject1' | awk '{ print }'
action ์„ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ ์•ก์…˜์ธ print ๊ฐ€ ์‹คํ–‰ ๋จ => echo -e 'no\ttitle\n1\tsubject1' | awk '/sub/'

# ์ง€์ •๋œ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ์ถœ๋ ฅ
echo -e 'no\ttitle\n1\tsubject1' | awk '/sub/ { print }'

# ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ ์ถœ๋ ฅ 
echo -e "a b c\nd e f" | awk '{ print }'

# ํ•„๋“œ ๊ฐ’ ์ถœ๋ ฅ 
echo -e "a b c\nd e f" | awk '{ print $1 }'

# ํ•„๋“œ ๊ฐ’์— ์ž„์˜ ๋ฌธ์ž์—ด์„ ๊ฐ™์ด ์ถœ๋ ฅ
echo -e "a b c\nd e f" | awk '{print "FIRST : "$1, "SECOND : "$2}'

# ํ•„๋“œ ์ค‘ ์ตœ๋Œ€ ๊ฐ’ ์ถœ๋ ฅ
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{max = 0; for (i=3; i < NF; i++) max = ($i > max) ? $i : max; print max}'

# ํŒŒ์ผ์— ์ €์žฅ๋œ awk program ์‹คํ–‰ 
echo "{max = 0; for (i=3; i < NF; i++) max = (\$i > max) ? \$i : max; print max}" > awk.awk
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk -f awk.awk

# ํ•„๋“œ ๊ตฌ๋ถ„ ๋ฌธ์ž ๋ณ€๊ฒฝํ•˜๊ธฐ
# echo -e "1:2:3\n7 8 9" | awk -F ':' '{ print $1 }'

# ํŠน์ • ํ•„๋“œ ๊ฐ’ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์„ ํƒ๋œ ๋ ˆ์ฝ”๋“œ๋งŒ ์ถœ๋ ฅ
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '$1 == 5 { print $2 }'

# ํŠน์ • ํ•„๋“œ๋“ค์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ 
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{sum += $3} END { print sum }'

# ๋ ˆ์ฝ”๋“œ ๋‹จ์œ„๋กœ ํ•„๋“œ ํ•ฉ ๋ฐ ํ‰๊ท  ๊ฐ’ ๊ตฌํ•˜๊ธฐ
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{ num = 0; sum = 0 } { num +=1; sum += ($3+$4+$5) } { print $0, "SUM="sum, "AVG="sum/num }'

# ํ•„๋“œ์— ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ์ถœ๋ ฅํ•˜๊ธฐ
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{print $1, $2, $3+2, $4, $5}'

# length ๋ช…๋ น์–ด
# ๋ ˆ์ฝ”๋“œ์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ์ฃผ๋Š” ๋ช…๋ น์–ด
# 'length($0) > n { print $N }' => echo -e 'no\ttitle\n1\tsubject1' | awk 'length($0) > 8 { print $1, $2 }'

# ํŠน์ • ๋ ˆ์ฝ”๋“œ๋งŒ ์ถœ๋ ฅํ•˜๊ธฐ
# exit ๋Š” awk ๋„์ค‘ ์ข…๋ฃŒ
echo -e "1 2\n3 4\n5 6" | awk 'NR == 2 { print $0; exit }'

# ๋ ˆ์ฝ”๋“œ ๋˜๋Š” ํ•„๋“œ์˜ ๋ฌธ์ž์—ด ๊ธธ์ด ๊ฒ€์‚ฌ
echo -e "12345678901234567890\n123456789012345678901" | awk ' length($0) > 20'

# BEGIN, END ๋ช…๋ น์–ด
# action ์„ ์‹คํ–‰ ํ•˜๊ธฐ ์ „๊ณผ ํ›„์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ์ง€์ • ๊ฐ€๋Šฅ
# 'BEGIN { print word } { print $N } END { print word }' 
echo -e 'no\ttitle' | awk 'BEGIN { print "START"} {print $2} END {print "END"}' 

# for ๋ช…๋ น์–ด 
# ๋ ˆ์ฝ”๋“œ์˜ ํ•„๋“œ์ˆ˜๋งŒํผ ๋ฃจํ”„๋ฅผ ๊ฐ€์ง€๋Š” ๋ช…๋ น์–ด
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{ for (i=2; i <= NF; i++) print $i }'
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{ for (i=2; i <= NF; i++) total += $i }; END { print total }'
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{max = 0; for (i=3; i<NF; i++) max = ($i > max) ? $i : max ; print max}'
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{ for (i=3; i<NF; i++) max = ($i > max) ? $i : max ;} END { print max }'
# for ๋ฌธ์€ ๊ฐ€๋กœ๋กœ ๊ฐ์‹ธ์ค„ ์ˆ˜ ์žˆ์Œ
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{ for (i=2; i <= NF; i++) {print $i;print $i+1} }'

# ์ถœ๋ ฅ ํ•„๋“œ ๋„ˆ๋น„ ์ง€์ •ํ•˜๊ธฐ
echo -e "1\t2\t3\t4\n5\t6\n7\tA\t8" | awk '{ printf "%-3s %-8s %-4s %-4s %-4s\n", $1, $2, $3, $4, $5}'

# ์ฐธ์กฐ
https://recipes4dev.tistory.com/171#4-awk-program-language

AWK COMMAND

728x90

๋Œ“๊ธ€