Awk 命令
环境配置 :
cat > reg.txt << e
> cat reg.txt
> Zhang Dandan 41117397 :250:100:175
> Zhang Xiaoyu 390320151 :155:90:201
> Meng Feixue 80042789 :250:60:50
> Wu Waiwai 70271111 :250:80:75
> Liu Bingbing 41117483 :250:100:175
> Wang Xiaoai 3515064655 :50:95:135
> Zi Gege 1986787350 :250:168:200
> Li Youjiu 918391635 :175:75:300
> Lao Nanhai 918391635 :250:100:175
> e
语法结构 :
awk [参数] '模式{动作}' 文件信息
sed [参数] '条件 指令' 文件信息
Awk 命令适用范围 :
-
处理文件信息 :
- 文本文件信息 :
- 日志文件信息 :
- 配置文件信息 :
-
处理文件方式 :
- 排除信息 :
- 查询信息 :
- 统计信息 :
- 替换信息 :
- 对文件列进行处理 :
Awk 命令实际操作 :
查找信息 :
awk '$2~/Xiaoyu/{print $1,$3}' reg.txt
查看文件第二列含有Xiaoyu字符的第一和第三列信息
处理分割符 : (-F)
awk -F"[: ]+"'$1~/Zhang/{print $1$2,$5}' reg.txt
查找第一列有 Zhang 字符串且以冒号和空格分割后的第125列信息显示
列对其 :
column -t 将文件内容列对齐
显示所有ID号码最后一位数字是1或5的人名 :
awk '$3~/[15]$/{print $1$2}' reg.txt|column -t
awk '$3~/1$|5$/{print $1$2}' reg.txt|column -t
awk 取反操作 :
awk '$1!~/^O/{print $3,$4}' reg.txt
/#|^$/ 取含有#和空行的内容
$0表示显示所有列信息
awk 替换操作 :
awk '$2~/Xiaoyu/{print $4}' reg.txt|sed 's#:#$#g'
awk '$2~/Xiaoyu/{print $4}' reg.txt|tr ":" "$"
awk -F"[: ]+"'$2~/Xiaoyu/{print "$"$4"$"$5"$"$6}' reg.txt
awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' reg.txt
gsub(/:/,"$",$NF);print $NF 多个命令用;来连接同时执行
gsub(/要替换的内容/,"替换成什么内容",$参数,表示替换第几列)
$NF 表示文件最后一列
awk命令模式分类 :
普通模式 :
比较行信息 :
awk 'NR>2' reg.txt
显示第二行以后的信息 NR 表示文件行信息
连续多行信息 :
awk 'NR==2,NR==4' reg.txt
2到4行内容 , 连续
不连续多行 :
awk 'NR==2;NR==4' reg.txt
第二第四行内容 ; 不连续多行
特殊模式 :
BEGIN{动作} : 在处理文件之前,先做什么事.
添加表头 :
awk 'BEGIN{print "姓","名","号码","捐款记录"}{print $0}' reg.txt|column -t
在文件开头 添加表头
用于计算 :
awk 'BEGIN{print 4+5}'
计算 4+5 的值 可进行的计算符号有 + - * / % ^(幂)==**
修改内置变量 :
awk '{print $(NF-1)}' reg.txt
取出倒数第二列
NR 表示行信息 :
FS 指定分割符
awk 'BEGIN{FS="[: ]+"}{print $4}' reg.txt
操作文件前先用 : 和空格分割 查看文件第4列信息
-v : 指定变量信息
awk -vFS="[: ]+" '{print $1,$4}' reg.txt
-v 指定 分割符FS="[: ]+"
END{动作} : 在处理文件之后,再做什么事情 ;
awk 'BEGIN{print "姓","名","号码","捐款记录"}{print $0}END{print "学生捐款登记表"}' reg.txt|column -t
咋文件末尾添加注释(内容)或将统计后的最终结果输出 如下 :
awk 统计分析 :
-
awk统计运算公式
-
文本信息累加运算
i=i+1
统计文件行数
awk '{i++}END{print i}' test.txt
-
数值信息求和运算 :
sum=sum+n表示要对文件第n行进行求和运算 :
seq 10|awk '{sum=sum+$1}END{print sum}' sep 10 创建环境 END输出最后结果 $1表示计算第一列的和
-
扩展
windows 系统和linux系统文件相互传输
- yum安装 lrzsz : yum install -y lrzsz
- rz 将windows数据传输到linux系统
- sz 将linux数据传输到windows系统
计算 secure-20161219 文件用户登录失败的次数
awk '/Failed/{i++}END{print i}' secure-20161219
列的分割过程 :