awk 상용 명령

awk 명령 설명
2009 년 03 월 31 일 화요일 22: 22
AWK 명령 상세 설명
1. 명령 요약:
awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다.
2. 명령 옵션:     -F                지정 구분자
     NF                단행의 마지막 단락
     NR                행수
     && 동일시      문장 양쪽 은 반드시 동시에 진짜 로 일치 해 야 한다.
     || 같다 OR       문장의 양쪽 이 동시에 혹은 그 중의 한쪽 이 진짜 로 일치 하 다.
     !                 반역 을 구하 다
     ARGC              명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개 변수 개 수 를 지원 합 니 다.
     ARGVARGC          매개 변수 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열 배열
     ENVIRON           시스템 설정 을 지원 하 는 환경 변수, 예 를 들 어 ENVIRON ["EDITOR"] = "Vi"
     FILENAME          a w k 스 크 립 트 의 실제 동작 을 지원 하 는 입력 파일
     FNR               a w k 현재 작업 의 기록 수 를 지원 합 니 다.그 변수 값 은 N R 보다 작다.
     FS                a w k 에 도 메 인 구분자 설정 에 사용 합 니 다. 명령 행 - F 옵션 과 같은 기능 입 니 다. 예: F S = ","
     NF                기록 필드 개 수 를 지원 합 니 다. 기록 이 읽 힌 후에 설정 합 니 다.
     OFS               출력 필드 구분 자 를 지정 할 수 있 습 니 다. 빈 칸 으로 부족 합 니 다.\# 로 설정 하려 면 O F S = "\#"을 쓰 십시오.
     ORS               출력 기록 구분자, 새 줄 로 부족 (\n)
     RS                기록 구분자, 새 줄 로 부족 (\n)
     gsub(r,s)         전체 $0 에서 r 를 s 로 대체 하고 r 는 원래 내용 이 며 s 는 새로운 내용 이 며 r 는/정규/
     gsub(r,s,t)      전체 t 에서 r 를 s 로 대체 하고 r 는 원래 내용 이 며 s 는 새로운 내용 이 며 r 는/정규/
     index(s,t)        s 에서 문자열 t 의 첫 번 째 위 치 를 되 돌려 줍 니 다.
     length(s)         s 길이 되 돌리 기
     match(s,r)        s 가 r 와 일치 하 는 문자열 을 포함 하 는 지 테스트 합 니 다.
     split(s,a,fs)     fs 를 구분자 로 하여 s 를 시퀀스 배열 a 로 나 눕 니 다.
     sprint(fmt,exp)   fm t 포맷 된 e x p 되 돌려 주기
     sub(r,s)          $0 첫 번 째 r 를 s 로 바 꾸 면 r 는/정규/
     sub(r,s,t)        도 메 인 t 의 첫 번 째 r 를 s 로 바 꾸 고 r 는/정규/로 바 꿀 수 있 습 니 다.
     substr(s,p)       p 에서 시작 하 는 접미사 부분 을 문자열 s 로 되 돌려 줍 니 다.
     substr(s,p,n)     문자열 s 의 p 부터 n 의 접미사 부분 을 되 돌려 줍 니 다.
     rand()            0 에서 1 사이 의 부호 소수점 소수 생 성
     Printf()
          -        왼쪽 정렬
          width    도 메 인의 보폭 은 0 으로 0 보폭 을 나타 낸다.
          . prec   최대 문자열 길이 나 소수점 오른쪽 자리 수
          %c       ASCII 문자
          %d       정수
          %e       부동 소수점
          %f       부동 소수점, 예 를 들 면 (1, 2, 3, 4)
          %g       awk 는 어떤 부동 소수점 변환 e 또는 f 를 사용 할 지 결정 합 니 다.
          %o       8 진수
          %s       문자열
          %x       십육 진수
3. 파일 list. txt 참조:
          54786542:13744232156
          360565687:15026736523
          360565687:13597572727
          100000:13898754555
          100000:13898754555
          1510121:155554215544:TTTa
          baoping 207
          1986 2009
          1986 2007
          baoping 2007
          Malist
          dj121M112d12nmm
          tete
4. 실례 설명:
    
 awk '/^/' list.txt      匹配包含^的行,即显示全文
     awk '/$/' list.txt      匹配包含$的行,即显示全文


     awk '/./' list.txt      匹配包含^的行,即显示全文


     awk '/.*/' list.txt     匹配包含任意字符的行,即显示全文
     awk '{ print $1 }' list.txt    显示list.txt中每行第一串字符串


     awk '/M/' list.txt    显示包含字符M所有的行


     awk '/M/ { print $1 }' list.txt   显示包含M的行的第一串字符串


     awk '/M/ {print "TT",$1}' list.txt   匹配包含M前面添加显示TT空格


     awk -F, '{ print $1; print $2}' list.txt   逗号为分隔符,无第二串则换行


     awk '{print NF}' list.txt 显示默认分隔符最后一个分段$数置


     awk '{print $NF}' list.txt    显示最后一分段的值


     awk '{n++}END{print n" line"}' list.txt 统计文本内容行数


     awk -F: '{if($2~/15026736523/) print $0}' list.txt 匹配第二域,并显示该记录


     awk '$0!~/15026736523/' list.txt   不匹配并显示该记录


     awk '$0 ~ /15026736523/ {print $0 }' list.txt   匹配手机号,并显示该记录


     awk -F: '$2=="15026736523" {print $0 }' list.txt   精确匹配$2的值


     awk -F: '{if($2=="15026736523")print $0}' list.txt   精确匹配$2的值


     awk -F: '{if($1 < $2) print $0}' list.txt   判断$1小于$2的记录并print


     awk '/[Mm].*/' list.txt    匹配M.*或者m.*


     awk -F: '$1 ~ /^…i/ {print $0}'list.txt   匹配第四个字符为i的行并显示


     awk -F: '$1 ~ /(360|332)/ {print $0}'list.txt 匹配360和332的行.效果同[]


     awk -F: '$1=="360565687" && $2=="15026736523"' list.txt 同时要符合条件,交集


     awk -F: '{if ($1~/360/ || $2 ~/150/)print $0}' list.txt 匹配任何一个,并集


     awk '{if (NR>0 && $1~/3605656/)print $0}' list.txt 匹配if条件


     awk 'BEGIN{var="200"} {if ($1<var) print $0}' list.txt 利用begin赋值


     awk '{if($1=="baoping"){$2=$2+1};print $2}' list.txt 算术运算


     awk '{if($1=="baoping") $2="1986";print $2}' list.txt 重新赋值并显示所有$2


     awk '{if($1=="baoping") {$2="1986";print $2}}' list.txt 重新赋值并显示单个$2


     awk 'BEGIN{print "To"}{if($1<$2) {$2=$2-$1;print $0}}' list.txt   结果1986 23


     awk '{(tot+=$2)}; END{print "total number:" tot}' list.txt 计算所有$2列的和


     ls -l | awk '/^[^d]/ {print $9"\t"$5} {tot+=$5} END {print "KB:" tot}' 大小和


     awk 'gsub("2007","2009",$0){print $0}' list.txt   将2007改为2009并显示


     awk 'BEGIN {print index("150","5")}'    显示2,数所在的位数
     awk '$1=="baoping" {print length($1)" "$1}' list.txt 显示结果7 baoping,字符长度


     awk '$1=="baoping" {print match($2,"7")}' list.txt 相同字符首位置,本例4


     awk 'BEGIN {print split("1#2#3#4",shuzu,"#")}' 结果为数组有4个元素shuzu[]


     echo az bg cde|awk '{sub(/[ab]/,"g",$2);print $2}' sub用正则表达式替换,结果gg


     awk -F"[ :]" '{ print $1 }' list.txt   同时使用两个分隔符


     awk '$1=="1986" {print substr($2,1,3)}' list.txt   显示匹配的$2从1后3个字符


     awk '{print substr($1,3)}' list.txt   显示每行第3字符后的字符


     awk 'BEGIN{STR="hello"}END{print substr(STR,4)}' list.txt 从第四位开始即lo


     echo "Stand-by" | awk '{print length($0)}' 统计变量字符个数


     STR="mydoc.txt"; echo $STR|awk '{print substr($STR,1,5)}' 结果mydoc


     echo "65" | awk '{printf "%c
",$0}' 以ASCII码显示65即A awk 'BEGIN{printf "%c
",65}' 以ASCII码显示65 awk 'BEGIN{printf "%f
",999}' 以符点数显示结果999.000000 awk -F"[: ]" '{printf "%-15s %s
",$1,$2}' list.txt $1与$2分别1 5个字符长度 awk '{if ($1<QQ) print $0}' QQ=360565687 list.txt 传递参数给awk使用 awk 'BEGIN{QQ=360565687}{if ($1<QQ) print $0}' list.txt 传递参数给awk使用 awk 'BEGIN{FS=":"}{print $1,"\t",$2}' list.txt 此方式必须在begin指定分隔符 awk 'NF!=MAX{print("line "NR" does not "MAX"")}' MAX=2 list.txt 如域数不等于2则显示,C风格 awk 'BEGIN{print (1+2.5)*3}' 结果10.5,shell不能比较浮点数 awk 'BEGIN {split("123#456#789",my,"#");print my[1]}' 此时my[1]为第一个元素 awk -F: '{a[$1]=a[$1]"
"$2;v[$1]++}END{for ( i in a )print "["i"]",v[i],a[i]}' qq.txt //显示数组中的key其中i即key awk '{for(i=1;i<100;i++){if($i ~/UN=/){print $2"\t"substr($5,2)" "$8" "$i}}}' kkk.txt //使用标准风格的for语句 awk 'a=0;{for(i=1;i<=NF;i++)a+=$i;b=a/NF;print b}' 1.txt //求a.txt每行的平均值 awk '{for(i=1;i<=NF;i++)a[i]+=$i}{if(NR==3){for(i=1;i<=NF;i++){print a[i]/NR}}}' 1.txt

 
 
 
awk 화해
 
Shell 에서 우 리 는 awk 로 열 에 따라 화 해 를 구 하 는 기능 을 실현 할 수 있 습 니 다. 매우 간단 합 니 다. 아래 의 예 를 보 세 요.
 1. 간단하게 열 에 따라 합 을 구한다.
 [linux@test/tmp]$ cat test
 123.52
 125.54
 126.36
 [linux@test/tmp]$ awk '{sum += $1};END {print sum}' test
 375.42
 2. 특정한 조건 에 부합 되 는 줄 에 대해 열 에 따라 합 을 구한다.
 [linux@test/tmp]$ cat test
 aaa 123.52
 bbb 125.54
 aaa 123.52
 aaa 123.52
 ccc 126.36
 파일 test 의 첫 번 째 줄 을 aaa 로 구 합 니 다.
 [linux@test/tmp]$ awk '/aaa/{sum += $2};END {print sum}' test
 370.56
 awk 는 텍스트 를 처리 하 는 것 이 매우 편리 하 다. 
 # cat lastlog 
 천진http://www.aibang.com/abc/a.jpg 0.015
 천진http://www.aibang.com/abc/a.jpg 0.015
 천진http://www.aibang.com/abc/a.jpg 0.015
 심양http://www.aibang.com/abc/a.jpg 0.015
 천진http://www.aibang.com/abc/a.jpg 0.015
 천진http://adad.ada.con/da 0.018
 천진http://adadad/dad/dd.abc 0.016
 심양http://www.sohu.com/abc/d.jif 1.14
 # cat lastlog | grep "천진"| awk '{print $NF}' | awk '{sum + = $1}; END {print sum}'
 0.094
 내 NF 가 마지막 필드 야.
 #awk '/천진/{sum + = $NF}; END {print sum}' lastlog

좋은 웹페이지 즐겨찾기