2013년 1월 21일 월요일

awk, grep, sed

grep은 지정된 파일내의 특정 문자나 단어를 검색하는 명령어
옵션 : -v :지정한 패턴과 일치하지 않는 것들을 보여준다
         -n : 일치하는 라인의 결과와 그 파일에서의 겨과 라인이 몇 번째 라인인지 알려줌
         -i : 대소문자 구별 x 
         -c : 일치하는 라인의 수를 보여줌
         -[A-Z] file: 대문자 1개라도 포함한 라인 출력   

awk는 입력 파일에서 행을 하나씩 읽은 후 
사용자 지정 문자열로컬럼을 분리하여 변수에 저장
field단위 처리가 가능 : 가로로 나열된 데이터를 세로 $1,$2... 로 처리

awk는 무조건 ‘ ’ 로 중괄호 { } 로 묶어야 한다.
           $3, $4 : ,(콤마)는 한칸 띄우기
           “ ” : 문자열은 “ ” 안에 놓여야 한다.


사용되는 용어
  - record - 하나의 line
  - field - space나 tab등으로 구분된 word
  - record separator - ORS와 RS에 저장된 carriage return
  - field separator
    : 입력 field separator -> FS에 저장 : space, tab, new line
    : 출력 field separator -> OFS에 저장 : space
  - 내장 변수 : NR(number of record), NF(number of field), $0(해당되는 하나의 record)


awk에서 사용되는 메타 문자
^
스트링의 처음에서 일치
$
스트링의 끝에서 일치
.
단일 문자에 일치
*
제로 혹은 많은 서행 문자에 일치
+
하나 이상의 선행 문자에 일치
?
제로 혹은 많은 선행 문자중에 하나와 일치
[ABC]
문자 세트에 있는 하나의 문자와 일치(A, B, C)
[^ABC]
문자 세트에 없는 하나의 문자와 일치(A, B, C 제외한 문자)
[A-Z]
A에서 Z까지에 있는 문자와 일치. 즉 대문자
A|B
A또는 B와 일치
(AB)+
AB 의 하나 이상의 세트와 일치
\*
문자 그대로의 별 표시와 일치
&
검색 스트링에서 발견된 것을 표시하기 위해 대체 스트링에서 사용


ls -al | awk '{print $5}'
-> ls -al 결과중 5번째 필드 출력


ls -al / | awk '$5 > 4096{print $5}'
-> 5번째 필드중 4096보다 큰 숫자 출력


ls -al / | awk '/root/{print}'
->  / 디렉토리에 root가 들어간 행 출력

ls -al | awk '{print "hahaha" $3}'
->  앞에hahaha를 붙여서 3번째 필드 출력

ls -al | awk '{substr($1, 1, 5)}'
-> 1번 필드에 1번 문자부터 5번째 문자까지 출력


score.txt
math 20 40 50
engl 10 90 30
kore 30 50 90


awk '{if($3 == "90" print $1}' score.txt
-> score.txt 파일중 3번째 필드가 90인 행의 1번 필드 출력

댓글 없음:

댓글 쓰기