awk 활용 구문 정리
ex. 파일 절대경로에서 directory path 와 file name을 분리하는 스크립트 (awk -F && -NF)
# cat path.sh
---------------------------------------------------------------------
#!/usr/bin/ksh
source_full_path="/home/event_action/ftp.log"
source_file=`echo ${source_full_path} | awk -F"/" '{print$NF}'`
source_path=`echo ${source_full_path} | awk -F'/[^/]*$' '{print $1}'`
echo "source_full_path: " ${source_full_path}
echo "source_file: " ${source_file}
echo "source_path: " ${source_path}
---------------------------------------------------------------------
+. awk 로 field 추출시 조건문 사용
ex. 5번째 field의 값이 IPv4 이거나 IPv6인 경우, 특정 컬럼 또는 전체 컬럼을 출력
# lsof | awk '$5=="IPv4"||$5=="IPv6"{print}'
>> awk로 field의 조건만 검사한 후 전체 데이터를 그대로 출력하려면 'print'만 지정
# lsof | awk '$5=="IPv4"||$5=="IPv6"{$1,$2,$3,$5,$7}'
# lsof | awk '$5!="IPv4"&&$5!="IPv6"{print}'
+. awk로 받은 값을 shell을 통해서 명령을 실행하는 경우
(device 리스트 조회 후 파라미터 변경시에 주로 사용)
# lsdev –Cc disk | grep –v hdisk0 | awk '{print "chdev -l" $1 "-a fc_err_recov=fast_fail" }' | sh -x
------------------------------
awk '{print substr($0, index($0,$9))}'
awk -v N=9 '{sep=""; for (i=N; i<=NF; i++) {printf("%s%s",sep,$i); sep=OFS}; printf("\n")}'
awk -v N=9 '{for(i=1;i<N;i++){$i=""}}1'
awk '{ s = ""; for (i = 9; i <= NF; i++) s = s $i " "; print s }'