Disclaimer: This article is a blogger hanchao5272 original articles, please indicate the source and leave the original link address, thank you! https://blog.csdn.net/hanchao5272/article/details/88787583
Series catalog References Portal: shell introductory study notes - Prologue
awk branch control
if
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)
--
while
admindeMacBook-Pro:~ admin$ echo "1 2 3 4" | awk '{i=1;while(i<=3){print $i^2;i++}}'
1
4
9
for
# 遍历所有字段
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 single quotation marks
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
You can display the input character ASCLL
encoding:
admindeMacBook-Pro:~ admin$ showkey -a
按任意键 - Ctrl-D 将结束这个程序
1 49 0061 0x31
a 97 0141 0x61
' 39 0047 0x27
^D 4 0004 0x04
for loop through the array
admindeMacBook-Pro:~ admin$ awk 'BEGIN{a[0]=1;a[1]=2;a[2]=3;for(i in a) print i}'
0
1
2
break和continue
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
This layer out of cyclecontinue
Out of this cycle
exit
# 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
The results of the implementation of the range:0~255
delete or delete array element
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 array
- awk the array is called
关联数组
, can be used not only数字
as a subscript, may also be used字符串
as a subscript. - Keys and values stored in the array element awk program inside a table, the table adopts
散列算法
, so the array element is随机排序
.
Subscript begin to decide where to you
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
Subscript is determined by what you
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
- Note to
字符串
an array subscript as the need to pay attention双引号
.
### randomly ordered
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
Count the number of rows
# 统计日志中各种级别的消息的出现次数
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
- Note:
awk
by|
the time additional pipeline command, the command needs to be enclosed in double quotes, otherwise an error
And to re-take the punch
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
Analog two-dimensional array
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