[클라우드 With리눅스/쉘프로그래밍(8) - gawk과 정규표현식]

SooYeon Yeon·2022년 8월 22일

클라우드 With리눅스

목록 보기
33/39

gawk

-F fs한 줄에서 데이터 필드 경계 식별 위한 파일 구분자 지정. 이시적으로 IFS를 변경하는 효과 ex) -F:
-f file프로그램을 읽어 동일 파일 이름 지정
[root@sooyeon 0726]# gawk '{print "안녕하세요"}'
a
안녕하세요
k
안녕하세요
gg
안녕하세요
^C

grep - 행 추출

gawk - 주로 열 추출

[root@sooyeon 0726]# gawk '{print $2}' db.txt
name
gildong
chulsoo
[root@sooyeon ~]# gawk -F: '{print $1}' /etc/passwd | head -5
root
bin
daemon
adm
lp
  • BEGIN, END로 앞 뒤에 문자 붙이기
[root@sooyeon ~]# gawk 'BEGIN {print "HELLO"}'
HELLO

[root@sooyeon ~]# gawk -F: 'BEGIN {print "REPORT"} {print $1}' /etc/passwd
REPORT
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
...

[root@sooyeon ~]# gawk -F: 'BEGIN {print "REPORT"} {print $1} END{print "보고완료"}' /etc/passwd
REPORT
root
bin
daemon
adm
lp
...
saslauth
tss
rpcuser
nfsnobody
nginx
보고완료
  • “this is a test”를 gawk에 입력값으로 넣어 test와 동일한 문자열이 있다면 $0(전체)를 출력하라
  • 완전히 일치하는 문자열이 있다면 출력
[root@sooyeon ~]# echo "this is a test" | gawk '/test/{print $0}'
this is a test

[root@sooyeon ~]# echo "hello" | gawk '/test123/{print $0}'

정규표현식

gawk는 정규 표현식을 사용할 수 있다.

정규표현식에서

*바로 앞 문자를 0번이상 사용할 수 있다.
?바로 앞 문자를 0,1번 사용할 수 있다.
+한 번 이상 사용
{ } 인터벌최소한 한번, 최대 2번까지

인터벌

be{1} : 한번

be{1,2} : 한번도 되고 두번까지 됨

  • be?t 이므로 e를 안쓸수도있고, 한번 쓸수도 있다는 뜻
[root@sooyeon ~]# echo "bt" | gawk '/be?t/{print $0}'
bt
[root@sooyeon ~]# echo "bet" | gawk '/be?t/{print $0}'
bet
[root@sooyeon ~]# echo "beet" | gawk '/be?t/{print $0}'
  • 대괄호는 [ae]라면 a or e

bat[abc] 에서 abc는 a or b or c

[root@sooyeon ~]# echo "bet" | gawk '/b[ae]?t/{print $0}'
bet
[root@sooyeon ~]# echo "bt" | gawk '/b[ae]?t/{print $0}'
bt
[root@sooyeon ~]# echo "baat" | gawk '/b[ae]?t/{print $0}'

[root@sooyeon ~]# echo "bct" | gawk '/b[a-z]?t/{print $0}'
bct
[root@sooyeon ~]# echo "bt" | gawk '/b[a-z]?t/{print $0}'
bt

[root@sooyeon ~]# echo "beet" | gawk '/be+t/{print $0}'
beet
[root@sooyeon ~]# echo "beet" | gawk '/b[a-z]{1,3}t/{print $0}'
beet
[root@sooyeon ~]# echo "beaet" | gawk '/b[a-z]{1,3}t/{print $0}'
beaet
[root@sooyeon ~]# echo "bAb0t" | gawk '/b[A-Za-z0-9]{1,3}t/{print $0}'
bAb0t
[root@sooyeon ~]# echo "bAb0et" | gawk '/b[A-Za-z0-9]{1,3}t/{print $0}'
bAb0et
  • 0~z, 0~9만 5번에서 10번까지만
[root@sooyeon 0728]# echo "abcd10" | gawk '/[a-z0-9]{5,10}/{print $0}'
abcd10
[root@sooyeon 0728]# echo "abcd@10" | gawk '/[a-z0-9]{5,10}/{print $0}'

앞에 ^ 쓰면 앞이라는것

종료는 $

[root@sooyeon 0728]# echo "@abcd10" | gawk '/^[a-z0-9]{5,10}$/{print $0}'
[root@sooyeon ~]# echo "the cat is asleep" | gawk '/cat|dog/{print $0}'
the cat is asleep

# c 또는 h이거나 , cat hat 또는 dog의 세가지 경우
[root@sooyeon ~]# echo "the hat is asleep" | gawk '/[ch]at|dog/{print $0}'
the hat is asleep

( ) 는 안에를 한글자로 취급

[root@sooyeon ~]# echo "Sat" | gawk '/Sat(urday)?/{print $0}'
Sat

[root@sooyeon ~]# echo "Saturday" | gawk '/Sat(urday)?/{print $0}'
Saturday

0개의 댓글