운영체제/리눅스
[리눅스] 쉘스크립트_2(awk,sed)
Cloud_Park
2022. 7. 31. 12:24
2022.07.11 - [운영체제/리눅스] - [리눅스] GCC 입문
2022.07.13 - [운영체제/리눅스] - [리눅스] GDB 디버거 _1
2022.07.24 - [운영체제/리눅스] - [리눅스] GDB디버거_2
2022.07.24 - [운영체제/리눅스] - [리눅스] Make 및 Makefile
2022.07.31 - [운영체제/리눅스] - [리눅스] 쉘스크립트_1
awk(오크)
오크는 유닉스에서 처음 개발된 일반 스크립트 언어,awk 기본 기능은 텍스트 형태로 되어 있는 입력 데이터를 행과 단어 별로 처리해 출력하는 것
명령의 수행결과나 파일의 데이터 내용을 한줄로 읽어 들여, 한줄의 내용을 단어로 끊어서 읽어 들이고 이를 조작 및 연산에 활용
실행
awk '페턴 {동작} 패턴{동작}' 파일명
command | awk '패턴{동작} 패턴{동작}'
awk -f awk파일명 파일명
BEGIN {동작} #입력을 읽기 전에 주어진 '동작'을 먼저 실행한다.
END {동작} #위와 비슷하다 입력을 모두 훑고 마지막에 주어진 동작을 실행한다.
/페턴/ # '패턴'에 일치하는 줄을 출력한다.
{동작} # 매 줄을 읽을 때마다 '동작'을 실행한다.
print는 텍스트를 출력한다.
주요 키워드
FILENAME - 입력된 파일이름
NR - 현재 행의 번호
NF - 현재 행의 단어의 개수
FS - 입력 단어 분리자
OFS - 출력 단어 분리자
실습 예제
파일네임 : information.txt
1,Lee,02-123-123,010-1232-3233,Seo
2,Kim,051-123-123,010-4223-1111,Inchon
3,Park,031-1231-123,010-1111-2222,Daegu
#!/bin/bash
/bin/awk \
'BEGIN {FS= ","; print "address book"\
{idx=$1}{name=$2}{phone=$3}{mobile=$4}{city=$5}\
{n+=1} \
{print"<("idx")" name">"}\
{print" Phone Number:" phone}\
{print" Mobile Number: " mobile}\
{print" City: " city}\
END{print"TOTAL:" n" address."}' information.txt
======
aws -F, 'print $2 "\t" $4' information.txt
======카운팅하기
awk '{++cnt}' END {print"Count=", cnt}' information.txt
실습2
/etc/passwd
###FS는 구분자 지정
#!/bin/bash
/bin/awk \
'BEGIN {FS=":"}\
{print $1 "home at" $6 }'\
/etc/passwd
===== -F: -> : 가 구분자
awk -F:'{print $1 "home at " $6}' /etc/passwd
sed
sed는 stream editer의 준말 대상에 대한 내용을 원하는 폼으로 변경이 목적
사용법
sed 's/regexp/replacement/g' inputFileName > outputFileName
regexp퍄턴을 찾아 replacement로 치환한 후 outputfile로 쓴다
===
필터
generateDate |sed 's/x/y/g'
generateDate로 수행한 데이터를 만든 다음 x-> y변경
===
echo xyz xyz |sed 's/x/y/g'
yyz yyz
=== -f 조건문파일 가져오기
sed -f subst.sed inputFileName > outputFileName
sed 's/won/woo/g' informagion.txt ## g는 전부 변경
sed 's/031/02/1' informaion.txt ## 첫번째만 변경
sed '2d' information.txt ##2번째 줄 삭제
sed '/Won/d' information.txt ## Won있는 줄삭제
sed'2i/2,New,00-000-0000,000-000-0000,korea' informaion.txt ## 2번째줄에 추가
키워드
sed 's/won/woo/g' informagion.txt ## g는 전부 변경
sed 's/031/02/1' informaion.txt ## 첫번째만 변경
sed '2d' information.txt ##2번째 줄 삭제
sed '/Won/d' information.txt ## Won있는 줄삭제
sed'2i/2,New,00-000-0000,000-000-0000,korea' informaion.txt ## 2번째줄에 추가
cat /proc/memoinfo
======
#!/bin/bash
total='cat /proc/memoinfo | grep MemTotal | /bin/awk 'print $2''
free='cat /proc/memoinfo |grep MemFree | /bin/aws 'print $2''
use='expr $total-$free'
echo "Mem Usage: $((use*100/total))%"