awk, sed 산책

짜리몽땅개발자·2020년 12월 21일
0

awk와 sed는 리눅스에서 서버를 관리할때나 꽤나 유용한것 같다.
아래는 자주 쓰는 코드 및 속성을 소개 한다.
구글링을 하면 더 쉽게 찾을수 있다. 하지만 키워드를 안다는 것은 다른 사람보다 아이템을 더 가지고 있다고 보면 된다. 세상은 키워드가 지배한다.

awk

# 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	지정한 매칭 연산을 만족하는 문자열의 길이

sed

# 레코드에 대한 줄 바꾸기 
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
profile
시간은 돈과 바꿀 수 있다.

0개의 댓글