awk 활용

2011. 1. 26. 15:1899. 정리전 - 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