Linux从入门到放弃 三剑客 --- awk命令详解
awk概念:模式识别和脚本编写说明:取反改按列查找高级使用:模式定义:特殊模式 BEGIN END内置变量:NRNFFS统计功能:求和运算求差运算累计追加原理:按行处理信息,根据匹配条件信息,完成相应操作。语法:awk 参数 ‘模式信息 (条件) {动作}’ 文件参数:-F指定分隔符[;:]+指定多个分隔符动作print输...
·
awk
-
awk三剑客命令概念作用
a 作用说明: 进行列操作/进行数据分析统计 b 执行原理: BEGIN模式任务 --> 处理文件信息 --> END模式任务 c 语法结构: awk [参数] '匹配模式{执行动作}' 文件信息
-
awk三剑客命令使用说明
a 进行查询操作: 按列进行查询(-F指定列分隔符) b 进行取反操作: c 进行替换操作: 替换语句格式(gsub(//,"",$n))
-
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}
-
语法:
awk 参数 '模式信息 (条件) {动作}' 文件
-
参数:
awk -F "[>:]+" '{print $7}'
awk -vFS"[ :]+" '{print $7}'
>和:为分隔符提取第7列信息
-F
FS
指定分隔符
[;:]+
指定多个分隔符
-v
提取内置变量
- 动作
awk '{print $7}' awk_test.txt
输出第7列信息
print
输出
gsub
替换
gsub(//,"",$x)
gsub(/信息/,"新信息",$列数)
将第几列的信息进行更改
- 变量
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行
- 提取行信息
awk '$7~/wy/' awk_test.txt
提取第7列含有wy的行
- 提取开头信息
awk '$7~/^77/{print $1,$2,$7}' awk_test.txt
提取第7列开头为77的行再输出第1、2、7列信息
- 提取结尾信息
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的行
- 替换
awk '$7~/wy/{gsub(/:/,"#",$NF);print $NF}' awk_test.txt
提取第7列含有wy的行,再把最后一列:替换为#输出最后一行
- 定义变量
awk 'BEGIN{NAME="wy"}$7~/dyp/{print NAME,$1,$2}' awk_test.txt
定义NAME=wy,提取第7列含有dyp的列,再输出wy和第1第2列的信息。
awk中变量不用加$
-
特殊模式
BEGIN:在文件处理之前完成相应的操作
作用:数值运算、计算器 -
BEGIN
awk 'BEGIN{print "姓","名","ID"}{print $0}' awk_test.txt |column -t
首先输出姓名ID,再输出全部列。
$0
全部列信息
- END
awk 'BEGIN{print "姓","名","ID"}{print $0}END{print "人员捐款记录表"} awk_test.txt
首先输出姓名ID,再输出全部列,最后输出人员捐款记录表。
作用:
在文件处理之后完成相应的操作,输出最终结果信息
awk 'BEGIN{x1}{x2}END{x3}'
先执行x1 在执行x2 最后执行x3
- 累加
i=i+1
awk '$(NF-1)~/wy/{i=i+1}END{print i}' awk_text.txt
统计awk_text.txt中wy出现次数
i 初始=0
出现一次+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
更多推荐
已为社区贡献1条内容
所有评论(0)