-15 명령 셸 항목 연구 노트 설명 : 세 총사 awk- 지점 문 중 하나는, 배열

면책 조항 :이 문서는 블로거 hanchao5272 원저이며, 소스를 표시하고 원래의 링크 주소를 남겨주세요, 감사합니다! https://blog.csdn.net/hanchao5272/article/details/88787583

: 시리즈 카탈로그는 포털 참고 입문 연구 노트 쉘 - 프롤로그

AWK 지점 제어

만약

admindeMacBook-Pro:~ admin$ seq 5 |awk '{if($0%2) print $0}'
1
3
5
admindeMacBook-Pro:~ admin$ seq 5 |awk '{if($0%2) print $0; else print "--"}'
1
--
3
--
5
admindeMacBook-Pro:~ admin$ seq 5 |awk '{if($0%2==0) print $0"(%2)"; else if($0%3==0) print $0"(%3)"; else print "--"}'
--
2(%2)
3(%3)
4(%2)
--

동안

admindeMacBook-Pro:~ admin$ echo "1 2 3 4" | awk '{i=1;while(i<=3){print $i^2;i++}}'
1
4
9

...에 대한

# 遍历所有字段
admindeMacBook-Pro:~ admin$ printf "1 2 3\n4 5 6\n7 8 9\n" |awk '{for(i=1;i<=NF;i++) printf $i" "}END{print ""}'
1 2 3 4 5 6 7 8 9 7 8 9
# 倒序遍历
admindeMacBook-Pro:~ admin$ printf "1 2 3\n4 5 6\n7 8 9\n" |awk '{for(i=NF;i>=1;i--) printf $i" "}END{print ""}'
3 2 1 6 5 4 9 8 7
# 每行单独换行
admindeMacBook-Pro:~ admin$ printf "1 2 3\n4 5 6\n7 8 9\n" |awk '{for(i=NF;i>=1;i--) {printf $i" "} print ""}'
3 2 1
6 5 4
9 8 7
# 忽略第1列
admindeMacBook-Pro:~ admin$ printf "1 2 3\n4 5 6\n7 8 9\n" |awk '{for(i=NF;i>=2;i--) {printf $i" "} print ""}'
3 2
6 5
9 8

IP 따옴표

admindeMacBook-Pro:~ admin$ echo "10.10.10.10 20.20.20.20 30.30.30.30" |awk '{for(i=1;i<=NF;i++){printf "\047"$i"\047 "} print ""}'
'10.10.10.10' '20.20.20.20' '30.30.30.30'

showkey -a당신은 입력 문자 표시 할 수있는 ASCLL인코딩 :

admindeMacBook-Pro:~ admin$ showkey -a

按任意键 - Ctrl-D 将结束这个程序

1 	 49 0061 0x31
a 	 97 0141 0x61
' 	 39 0047 0x27
^D 	  4 0004 0x04

배열을 루프

admindeMacBook-Pro:~ admin$ awk 'BEGIN{a[0]=1;a[1]=2;a[2]=3;for(i in a) print i}'
0
1
2

계속 和 휴식

admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++){if($i==3){break};print $i}}'
1
admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++){if($i==3){continue};print $i}}'
1
5
  • break주기 중이 층
  • continue이주기 중

출구

# break的执行结果
admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++){if($i==3){break};print $i}}'
1
admindeMacBook-Pro:~ admin$ echo $?
0
# continue的执行结果
admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++){if($i==3){continue};print $i}}'
1
5
admindeMacBook-Pro:~ admin$ echo $?
0
# exit(111)的执行结果
admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++){if($i==3){exit(111)};print $i}}'
1
admindeMacBook-Pro:~ admin$ echo $?
111
# exit(-1)的执行结果
admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++){if($i==3){exit(-1)};print $i}}'
1
admindeMacBook-Pro:~ admin$ echo $?
255
  • exit범위의 구현의 결과 :0~255

삭제 배열 요소를 삭제

admindeMacBook-Pro:~ admin$ awk 'BEGIN{a[0]=1;a[1]=2;a[2]=3;for(i in a) print i}'
0
1
2
# delete array 删除数组
admindeMacBook-Pro:~ admin$ awk 'BEGIN{a[0]=1;a[1]=2;a[2]=3;delete a;for(i in a) print i}'
# delete array[i] 删除数组元素
admindeMacBook-Pro:~ admin$ awk 'BEGIN{a[0]=1;a[1]=2;a[2]=3;delete a[1];for(i in a) print i}'
0
2

AWK의 배열

  • 어레이가 호출 AWK 关联数组뿐만 아니라 사용할 수는 数字아래 첨자로도 사용될 수있다 字符串첨자로.
  • 키와 값은 표 안에 배열 요소 AWK 프로그램에 저장된 테이블이 채택 散列算法되므로, 배열 요소이다 随机排序.

당신에게 위치를 결정하기 시작 첨자

admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++) a[i^2]=$i;print a[1],a[9]}'
1 5

첨자는 무엇에 의해 결정된다

admindeMacBook-Pro:~ admin$ awk 'BEGIN{a["x"]=22;a["y"]=11;for(v in a) print "a["v"]="a[v]}'
a[x]=22
a[y]=11
admindeMacBook-Pro:~ admin$ awk 'BEGIN{a["x"]=22;a[y]=11;for(v in a) print "a["v"]="a[v]}'
a[]=11
a[x]=22
  • 참고 字符串주의 할 필요가 같은 배열 첨자 双引号.

무작위로 정렬 ###

admindeMacBook-Pro:~ admin$ echo "1 3 5" |awk '{for(i=1;i<=NF;i++) a[i^2]=$i;for(v in a) print "a["v"]="a[v]}'
a[4]=3
a[9]=5
a[1]=1

행의 수를 계산

# 统计日志中各种级别的消息的出现次数
admindeMacBook-Pro:~ admin$ cat log.txt |awk '{arr[$1]++}END{for(v in arr) print v,arr[v]}'
WARNING 1
ERROR 2
INFO 3
# 另外的实现方式
admindeMacBook-Pro:~ admin$ cat log.txt |awk '{print $1 |"sort |uniq -c"}'
      2 ERROR
      3 INFO
      1 WARNING
# 管道后追加的命令必须放在双引号中
admindeMacBook-Pro:~ admin$ cat log.txt |awk '{print $1 |sort |uniq -c}'
awk: cmd. line:1: {print $1 |sort |uniq -c}
awk: cmd. line:1:                  ^ syntax error
# 管道后追加的命令必须放在双引号中,且同一个双引号中
admindeMacBook-Pro:~ admin$ cat log.txt |awk '{print $1 |"sort" |"uniq -c"}'
awk: cmd. line:1: {print $1 |"sort" |"uniq -c"}
awk: cmd. line:1:                    ^ syntax error
  • 참고 : awk에 의해 |시간 추가 파이프 라인의 명령, 명령, 큰 따옴표로 묶어야하는, 그렇지 않으면 오류가 필요

그리고하기 위해 펀치를 다시 받아

admindeMacBook-Pro:~ admin$ printf "111\n222\n111\n333\n444\n222\n"
111
222
111
333
444
222
# 取重
admindeMacBook-Pro:~ admin$ printf "111\n222\n111\n333\n444\n222\n" |awk 'a[$0]++'
111
222
# 去重
admindeMacBook-Pro:~ admin$ printf "111\n222\n111\n333\n444\n222\n" |awk '!a[$0]++'
111
222
333
444

아날로그 2 차원 어레이

admindeMacBook-Pro:~ admin$ awk 'BEGIN{a["1,1"]=1;a["1,2"]=2;a["2,1"]=2;a["2,2"]=4;for(v in a){print "a["v"]="a[v]}}'
a[1,1]=1
a[1,2]=2
a[2,1]=2
a[2,2]=4

추천

출처blog.csdn.net/hanchao5272/article/details/88787583