免責事項:この記事はブロガー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
forループ配列を介して
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
アナログ二次元アレイ
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