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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.