目录
awk
awk的基本介绍:
GAWK(1) Utility Commands GAWK(1)
NAME
gawk - pa
##awk
接一个单引号,后面接一个花括号双引号是用不了的
awk命令是一种用于文本处理的强大工具#注意要有空格 而且是单引号
##完整格式 awk 'BEGIN{comamds}pattern{commands}END { commands }'file
awk基本用法
##awk用法
显示文件的某一列
awk '{ print $2 }' file.txt
##过滤功能 pattern模式,模版
awk '/pattern/ { print }' file.txt
[root@wangyalin-hunan-changsha passwd]# awk '/root/ { print }' sanchuang_passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
计算文件的行数:
awk 'END { print NR }' file.txt
[root@wangyalin-hunan-changsha passwd]# awk 'END{print NR}' sanchuang_passwd
73
分隔符-F
awk -F',' '{ print $1 }' file.txt
引用变量--->也可以使用双引号,但是$符号要接转移字符--->\$
-v variable
[root@wangyalin-hunan-changsha shell]# echo $name
wang
[root@wangyalin-hunan-changsha shell]# awk -F ":" -v var=$name '$1 ~ var {print $1}' /etc/passwd
wangyalin
awk命令的操作符
##内置变量
NR: 记录的行数 number of record
NF:字段数,一行有多少列 number of filed
FS: ---》-F输入分隔符,默认是空白分割符(默认是tab和空格)field separator
OFS:输出分隔符,默认是空格分割符out field separator
##内置函数
##length()获得字符串长度的函数
##systime()获得时间的内置函数--获得现在距1970年的时间
##strftime(“%D”,systime())
[root@wangyalin-hunan-changsha shell]# awk '{print strftime("%D",systime())}' /etc/passwd
##system() 可以调用一些系统函数
[root@wangyalin-hunan-changsha shell]# awk '{system("mkdir -p /tmp/sc/" $1)}' ./name.txt
##split() 分割函数
split($1,ip,”:”)--->$1,表示被切割的字段,ip就是切割后存放数据得数组,”:”表示分割符
##substr()切割字符串的函数--类似cut
substr($1,2,4)##表示切割$1字段,2##表示起始字符,从第二个字符开始截取;4##表示截取字符长度,截取4个字符串
[root@wangyalin-hunan-changsha shell]# echo kajudswhfiucansiufh aeiuw|awk '{ print substr($1,2,4)}'
ajud
awk的条件语句
awk 的for循环
awk 数组
##数组下标从1 开始
##bash,Python 数组下标都是从0开始
[root@wangyalin-hunan-changsha shell]# cat bill.txt|awk '{bill[$1] += $2}END{for( i in bill) print i ,bill[i]}'
wang 346
feng 100215
tan 143
zhao 1293
tian 23
liu 325466
zhang 12
[root@wangyalin-hunan-changsha shell]# cat bill.txt
feng 100000
feng 212
feng 3
wang 23
wang 323
liu 32
liu 325434
tian 23
zhang 12
zhao 1293
tan 143
##awk引用shell变量过程
[root@wangyalin-hunan-changsha ~]# watch -d -n 2 "ifconfig ens33|awk '/bytes/{print \$1,\$5}'"
awk: cmd. line:1: /bytes/{print ,}
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: /bytes/{print ,}
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: /bytes/{print ,}
awk: cmd. line:1: ^ unexpected newline or end of string
##shell解释过程中"ifconfig ens33|awk '/bytes/{print \$1,\$5}'"被当做参数,同时会把$1,$5当做位置变量,但是刚开始时候那个awk命令并没有执行,所以$1,$5是空值的,也就无法执行
##awk的双引号用法
name=wang
使用双引号,但是$的一般用法(0-9,#*),符号要接转移字符--->\$
[root@wangyalin-hunan-changsha ~]# awk -F ":" "\$1 ~ /$name/ {print \$1}" /etc/passwd
wangyalin
wangguang
##接-v的用法
[root@wangyalin-hunan-changsha ~]# awk -F ":" -v var=$name '$1 ~ var {print $1}' /etc/passwd
wangyalin
wangguang
##这是我经常做文本编辑文件的内容格式
##这个以":"为分割符 ,$1是表示第一个字段
[root@web ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin