AWK
AWK
AWK의 기능을 디자인한 사람들의 이니셜로 이다.
A: Alfred V. W:Peter J. [w]einbergerK : Brian W. [K]ernighan
사용방법 awk [옵션 ] [awk 프로그램 ] [파일명] 형태로 사용
# 옵션
# -F(Field) : 필드 구분자 지정
# -f (file): awk 프로그램 파일 경로 지정
# -v :: awk 프로그램에서 사용할 유효한 특정 값지정
grep 가 행으로 패턴에 해당하는 값을 찾았다면
awk는 열로 패턴에 해당하는 값을 찾는다.
#awk 프로그램 기본 구조
pattern { action } 형태 => ex. ) echo -e 'no\title\t\n1\tsubject1' | awk '/sub/ { print }'
pattern 을 생략하면 모든 레코드가 적용된다. => ex. ) echo -e 'no\title\t\n1\tsubject1' | awk ' { print }'
무엇을 찾아야 할 지 몰라 다 가져온다.
action을 생략하면 기본 액션인 print가 실행된다 => ex. ) echo -e 'no\title\t\n1\tsubject1' | awk '/sub/'
/sub/== 가 바로 패턴이다.
필드를 호출하기 위해서는 $를 사용한다.
$0을 하면 모든 것이 출력된다.
이렇게 해당 액션앞에 이해하기 쉽도록 문자를 넣을 수도 있다.
for문 삽입도 가능 echo 필드를 나누는 기준은 띄어쓰기다
이 awk 반복문에 대해 설명하자면
i=열을 나타내는 데 i=3은 3번째 열 부분을 나타낸다. 즉 3번 째 필드인 3 8을 나타낸다.
NF 는 해당 행의 열의 개수를 나타낸다.
첫 번째 행의 NF는 4 두 번째는 2 3번째는 3이다.
for문에서 NF는 4인데 4보다 작으니 첫 째 행의 3번째인 3이 출력된다.
두 번째 행으로 가서 NF는 2인데 i=3이라 3번째 값이 없어 0 이출력된다
NF=3이고 i=3이라 3보다 작은 3은 없기 때문에 0이 출력된다.
따라서 밑에 코드는 필드 1번 $1만 나오게 출력을 했는데 1:2:3은 공백이 없어 1개의 필드로 인식하여 다 나온게 되었다. 따라서 필드 구분하는 구분자를 내가 원하게 세팅해줘야 한다.
그 옵션은 바로 -F 옵션을 주면 된다.
이렇게 -F 옵션 뒤에 구분자로 할 것을 세팅해주면 그것을 구분자로 인식한다.
awk 파일로 만들어서 호출하는 방법
vi awk.awk.에 {print}를 넣은 다음 cat .awk.awk로 파일을 읽어오면 호출이된다.
또한 awk로 보기 위해서 -f 옵션을 주어 awk.awk.로 파일경로를 지정해줄 수도 있다.
하지만 자주 사용되진 않는다.
awk 연산기능
$3+2를 함으로소 3 0 8에 각각 2가 더해진 것을 알 수 있다. 이렇게 연산기능도 수행이 가능하다.
길이
$0은 전체를 의미하고 awk 'length'를 사용하여 길이가 6보다 큰 것을 출력한다고 시킬 수도 있다.
BEGIN END 사용
BEGIN은 무조건 앞에 출력을 해주는 것을 말한다. 그리고 END는 끝에 출력해주는 것을 말한다
%사용 ==넓이
%는 몇 칸만큼 공백을 주겠다는 의미이다.
즉 $1에 대해 3칸만큼 공백을 주겠다.
$2는 8칸을 사용하겠다.
$3는 4칸만큼 사용하겠다.
즉 출력 넓이를 정할 수 있다.