Linux从入门到放弃 三剑客 --- awk命令详解

awk

  1. awk三剑客命令概念作用

     a 作用说明: 进行列操作/进行数据分析统计
     b 执行原理: BEGIN模式任务 --> 处理文件信息 --> END模式任务
     c 语法结构: awk [参数] '匹配模式{执行动作}'  文件信息
    
  2. awk三剑客命令使用说明

     a 进行查询操作: 按列进行查询(-F指定列分隔符)
     b 进行取反操作: 
     c 进行替换操作: 替换语句格式(gsub(//,"",$n))
    
  3. awk三剑客命令高级用法

     a 命令模式信息: 基础模式 特殊模式
     b 命令内置变量: NR NF FS	 
     c 命令运算方式: 
     1. 累加运算:  i=i+1 --> i++
     2. 求和运算:  i=i+$n
     3. 求差运算:  i=i-$n  BEGIN{i=初始值}{i=i-$3}END{print i}
    
  4. 语法:
    awk 参数 '模式信息 (条件) {动作}' 文件

  5. 参数:

awk -F "[>:]+" '{print $7}'
awk -vFS"[ :]+" '{print $7}'
	>和:为分隔符提取第7列信息
		-F
		FS
			指定分隔符
		[;:]+
			指定多个分隔符
		-v
			提取内置变量
  1. 动作

print

awk '{print $7}' awk_test.txt 
	输出第7列信息
	print
		输出

gsub

	替换
	gsub(//,"",$x)
	gsub(/信息/,"新信息",$列数)
		将第几列的信息进行更改
  1. 变量
awk 'NR==7 {print $1,$3}' awk_test.txt
	提取行7行的第一第三列
		NR(number roW)
			行
		NF(number field)
			列
			$NF
				最后一列
		print
			输出
		$
			列
			$0
				将每一列全部输出

提取连续多行

awk 'NR>2 && NR<7' awk_test.txt
提取3至6行

提取不连续多行

awk 'NR==2,NR==7' awk_test.txt
提取2和7行
  1. 提取行信息
awk '$7~/wy/' awk_test.txt
提取第7列含有wy的行
  1. 提取开头信息
awk '$7~/^77/{print $1,$2,$7}' awk_test.txt
提取第7列开头为77的行再输出第1、2、7列信息
  1. 提取结尾信息
awk '$7!~/[17]$/{print $1,$2,$7}' awk_test.txt
awk '$7~/[^17]$/{print $1,$2,$7}' awk_test.txt
提取第7列排除结尾为1和7的行再输出第1、2、7列信息
awk '!/7$/' awk_test.txt
提取结尾不为7的行
  1. 替换
awk '$7~/wy/{gsub(/:/,"#",$NF);print $NF}' awk_test.txt
提取第7列含有wy的行,再把最后一列:替换为#输出最后一行
  1. 定义变量
awk 'BEGIN{NAME="wy"}$7~/dyp/{print NAME,$1,$2}' awk_test.txt
定义NAME=wy,提取第7列含有dyp的列,再输出wy和第1第2列的信息。
awk中变量不用加$
  1. 特殊模式

    BEGIN:在文件处理之前完成相应的操作
    作用:数值运算、计算器

  2. BEGIN

awk 'BEGIN{print "姓","名","ID"}{print $0}' awk_test.txt |column -t
首先输出姓名ID,再输出全部列。
	$0
	全部列信息
  1. END
awk 'BEGIN{print "姓","名","ID"}{print $0}END{print "人员捐款记录表"} awk_test.txt
首先输出姓名ID,再输出全部列,最后输出人员捐款记录表。
作用:
	在文件处理之后完成相应的操作,输出最终结果信息
awk 'BEGIN{x1}{x2}END{x3}'
先执行x1 在执行x2 最后执行x3
  1. 累加
i=i+1
awk '$(NF-1)~/wy/{i=i+1}END{print i}' awk_text.txt
统计awk_text.txt中wy出现次数
i	初始=0
	出现一次+1
  1. 求和
i=i+$n
awk '{i=i+$3}END{print i}' awk_text.txt
统计第3列数值总和
a	b	c	d
2	3	2	1
1	3	3	4
2	4	3	1
i=i+2
i=2+3
i=5+3
i=8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值