awk와 sed는 리눅스에서 서버를 관리할때나 꽤나 유용한것 같다.
아래는 자주 쓰는 코드 및 속성을 소개 한다.
구글링을 하면 더 쉽게 찾을수 있다. 하지만 키워드를 안다는 것은 다른 사람보다 아이템을 더 가지고 있다고 보면 된다. 세상은 키워드가 지배한다.
# awk 내부 변수
FS 필드 구분자 - Fields Seperator
RS 레코드 구분자 - Records Seperator
NF 현재 레코드의 필드수(Number of Fields)
NR 현재 파일에서 레코드 넘버(Number of Records)
FNR 입력파일이 여러개인 경우에 현재 파일에서의 NF를 표시한다.
OFS 출력시의 FS(Output Fields Seperator). 이 값을 변경하게 되면, 출력시의 FS 가 바뀌게 된다.
ORS 출력시의 RS(Output Records Seperator). 이 값을 변경하게 되면, 출력시의 RS 가 바뀌게 된다
# awk 시스템 변수
FILENAME 현재 파일명 $0 입력 레코드
FS 입력 필드 구분 디폴트 : 공백 $n 입력 레코드의 N번째 필드
NF 현재 레코드 필드 갯수 ARGC 커맨드 라인의 인자 갯수
NR 현재 레코드 번호 ARGV 커맨드 라인 인자를 포함하는 배열
OFMT 숫자에 대한 출력 포맷 디폴트 : %.6g ENVIRON 환경변수들을 모아둔 관계형 배열
OFS 출력 필드 구분 디폴트 : 빈줄 FNR NR과 동일 단지 현재 파일에 적용된다는 점이 다름
ORS 출력 레코드 구분 디폴트 : newline RSTART 지정한 매칭 연산을 만족하는 문자열의 맨 앞부분
RS 입력 레코드 구분 디폴트 : newline RLENGTH 지정한 매칭 연산을 만족하는 문자열의 길이
# 레코드에 대한 줄 바꾸기
echo 'This is a test' | sed 's/test/big test/'
This is a big test
[tony@k8s-node3 ~]$ sed 's/dog/cat/' data1.txt
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
# 하나 이상일때는 -e 옵션을 넣는다.
[tony@k8s-node3 ~]$ sed -e 's/brown/green/; s/cat/dog/' data1.txt
The quick green fox jumps over the lazy dog.
The quick green fox jumps over the lazy dog.
The quick green fox jumps over the lazy dog.
The quick green fox jumps over the lazy dog.
The quick green fox jumps over the lazy dog.
# 파일로 만들기
[tony@k8s-node3 ~]$ vi script1.sed
[tony@k8s-node3 ~]$
[tony@k8s-node3 ~]$ sed -f script1.sed data1.txt
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
# gawk
# 엔터를 한번더 쳐야 작동한다.
[tony@k8s-node3 ~]$ gawk '{print "Hello world!"}'
Hello world!
Hello world!
Hello world!
Hello world!
# 구분자 결정 -F
tony@k8s-node3 ~]$ gawk -F ":" '{print $1}' /etc/passwd