awk 활용
2011. 1. 26. 15:18ㆍ99. 정리전 - IT/13. Unix 얇팍지식
텍스트 파일의 전체 라인수를 계산
# cat /etc/passwd | awk ‘END {print NR}’
# awk ‘END {print NR}’ /etc/passwd
텍스트 파일의 특정번째 라인의 문자열을 프린트
# awk ‘NR ==10’ /etc/passwd
# cat /etc/passwd | awk ‘NR==10’
각 라인의 맨끝 단어(필드)를 프린트
# bdf | awk ‘{print $NF}’
마지막 입력 라인의 마지막 필드를 프린트
# bdf | awk ‘{field = $NF} END {print field}’
4개 이상의 필드(단어)를 가지고 있는 라인을 프린트
# bdf | awk ‘NF > 4’
'fly'를 포함하고 있는 라인의 총수 계산
# awk ‘/fly/ {nlines = nlines +1 } END {print nlines}’ /etc/passwd
가장 긴 첫번째 필드(단어)와 그 해당 라인을 출력
# awk ‘$1 > max{max = $1; maxline=$0} END {print max,maxline} /etc/passwd
구분자를 “:” 로 하여 첫번째 필드를 프린트
# awk ‘FS=”:” {print $1}’ /etc/passwd
80문자 이상을 가진 모든 라인을 프린트
# awk ‘length($0) > 80’ <FILENAME>
필드의 갯수와 해당 라인을 프린트
# awk ‘{print NF,$0}’ <FILENAME>
첫번째 두 필드를 반대로 프린트
# awk ‘FS=”:” {print $2, $1}’ /etc/passwd
첫번째 두 필드를 반대로 바꾼 다음, 그 라인을 프린트
# bdf | awk ‘{temp=$2; $1=$2’ $2=temp;print}’
첫번째 필드는 라인 번호로 대체하여 그 라인을 프린트
# awk ‘FS=”:” {$1=NR;print}’ /etc/passwd
두번째 필드는 삭제한 후 라인을 프린트
# bdf | awk ‘{$2=””;print}’
각 라인의 모든 필드를 역순으로 프린트
# bdf | awk ‘{for (i=1;i<=NF;i=i+1) printf(“%s”,$i) printf(“n”)’
각각의 라인에 대하여 각 필드를 더한 값을 프린트
# awk ‘{sum=0
for (i=1;i<=NF;i=i+1)
sum=sum+$i
}’ <FILENAME>
모든 라인에 존재하는 필드를 모두 더한 값을 프린트
# awk ‘{ for (i=1;i<=NF;i=i+1) sum=sum+$i } END { print sum }’ <FILENAME>
AWK 의 system variable
awk FILENAME 현재파일명
FS 필드 구분자
NF 현재라인의 필드 수
NR 현재라인의 레코드 번호
OFMT 숫자 출력을 위한 포맷(예를 들어 %.6g)
OFS 출력 필드 구분자(디폴트는 blank)
ORS 출력 레코드 구분자(디폴트는 newline)
RS 레코드 구분자(디폴트는 newline)
$0 전체 입력라인
$n n번째 필드의 내용(각 필드는 FS로 구분된다.)
http://cafe.naver.com/ghson.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=854&social=1
# cat /etc/passwd | awk ‘END {print NR}’
# awk ‘END {print NR}’ /etc/passwd
텍스트 파일의 특정번째 라인의 문자열을 프린트
# awk ‘NR ==10’ /etc/passwd
# cat /etc/passwd | awk ‘NR==10’
각 라인의 맨끝 단어(필드)를 프린트
# bdf | awk ‘{print $NF}’
마지막 입력 라인의 마지막 필드를 프린트
# bdf | awk ‘{field = $NF} END {print field}’
4개 이상의 필드(단어)를 가지고 있는 라인을 프린트
# bdf | awk ‘NF > 4’
'fly'를 포함하고 있는 라인의 총수 계산
# awk ‘/fly/ {nlines = nlines +1 } END {print nlines}’ /etc/passwd
가장 긴 첫번째 필드(단어)와 그 해당 라인을 출력
# awk ‘$1 > max{max = $1; maxline=$0} END {print max,maxline} /etc/passwd
구분자를 “:” 로 하여 첫번째 필드를 프린트
# awk ‘FS=”:” {print $1}’ /etc/passwd
80문자 이상을 가진 모든 라인을 프린트
# awk ‘length($0) > 80’ <FILENAME>
필드의 갯수와 해당 라인을 프린트
# awk ‘{print NF,$0}’ <FILENAME>
첫번째 두 필드를 반대로 프린트
# awk ‘FS=”:” {print $2, $1}’ /etc/passwd
첫번째 두 필드를 반대로 바꾼 다음, 그 라인을 프린트
# bdf | awk ‘{temp=$2; $1=$2’ $2=temp;print}’
첫번째 필드는 라인 번호로 대체하여 그 라인을 프린트
# awk ‘FS=”:” {$1=NR;print}’ /etc/passwd
두번째 필드는 삭제한 후 라인을 프린트
# bdf | awk ‘{$2=””;print}’
각 라인의 모든 필드를 역순으로 프린트
# bdf | awk ‘{for (i=1;i<=NF;i=i+1) printf(“%s”,$i) printf(“n”)’
각각의 라인에 대하여 각 필드를 더한 값을 프린트
# awk ‘{sum=0
for (i=1;i<=NF;i=i+1)
sum=sum+$i
}’ <FILENAME>
모든 라인에 존재하는 필드를 모두 더한 값을 프린트
# awk ‘{ for (i=1;i<=NF;i=i+1) sum=sum+$i } END { print sum }’ <FILENAME>
AWK 의 system variable
awk FILENAME 현재파일명
FS 필드 구분자
NF 현재라인의 필드 수
NR 현재라인의 레코드 번호
OFMT 숫자 출력을 위한 포맷(예를 들어 %.6g)
OFS 출력 필드 구분자(디폴트는 blank)
ORS 출력 레코드 구분자(디폴트는 newline)
RS 레코드 구분자(디폴트는 newline)
$0 전체 입력라인
$n n번째 필드의 내용(각 필드는 FS로 구분된다.)
http://cafe.naver.com/ghson.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=854&social=1