shell命令-awk常用命令

awk常用命令

awk命令

可以简单的理解为是grep命令的增强命令

新建文件 sample.txt

 1  2 this is a test
 2  3 Are you like awk
 3  This's a test
 4  10 There are orange,apple,mongo

awk默认每行按照空格或tab键分割

文件sample.txt分割如下

这里写图片描述

输出文件sample.txt的第三列和第四列

命令:awk ‘{print $3,$4}’ sample.txt

这里写图片描述

结合printf命令,格式化输出第三列和第四列和第五列

命令:awk ‘{printf “%-8s %-8s %-8s\n”, $3, $4, $5}’ sample.txt

这里写图片描述

设置分割符号

将分隔符设置为:,
这里写图片描述

命令:awk -v FS=”,” ‘{print $1, $3}’ sample.txt

这里写图片描述

ps: -v 为设置变量的意思,FS表示列分隔符

设置变量

命令:awk -v a=1 ‘{print $1, $1+a}’ sample.txt

这里写图片描述

过滤输出

输出满足条件的行

一般过滤
过滤第一列不等于2的行

命令:awk ‘$1!=2’ sample.txt

这里写图片描述

过滤第一列不等于2并且第三列等于this的行

命令:awk ‘$1!=2 && $3==”this”’ sample.txt

这里写图片描述

过滤第一列不等于2或者第三列等于Are的行

命令:awk ‘$1!=2 || $3==”Are”’ sample.txt

这里写图片描述

正则表达式过滤
过滤包含re字符的行

命令:awk ‘/re/’ sample.txt

这里写图片描述

反向搜索,过滤不包含re字符的行

命令:awk ‘!/re/’ sample.txt

这里写图片描述

过滤某一列包含th字符的行

命令:awk ‘$3 ~ /re/’ sample.txt
命令:awk ‘$4 ~ /re/’ sample.txt
命令:awk ‘$5 ~ /re/’ sample.txt

这里写图片描述

内置变量

内置变量:awk预定好的变量,可以直接使用

常见内置变量
变量含义
$n当前记录的第n个字段,字段间由FS分隔
$0完整的输入记录
FILENAME当前文件名
FS输入字段分隔符, 默认为空白字符
OFS输出字段分隔符, 默认为空白字符
RS输入记录分隔符(输入换行符), 指定输入时的换行符
ORS输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF当前行的字段的个数(即当前行被分割成了几列)
NR行号,当前处理的文本行的行号。
FNR各文件分别计数的行号
ARGC命令行参数的个数
ARGV数组,保存的是命令行所给定的各参数
输出文件名,当前行,当前行被分割成列数,当前行行数

命令:awk ‘{print FILENAME, $0, NF, NR}’ sample.txt

这里写图片描述

格式化输出文件名,当前行,当前行被分割成列数,当前行行数

命令:awk ‘{printf “%-10s %-40s %-10s %-10s\n”, FILENAME, $0, NF, NR}’ sample.txt

这里写图片描述

awk脚本

awk脚本语法规则类C,执行阶段分三个阶段

  1. BEGIN{ 代码 }
  2. { 代码 }
  3. END { 代码 }
执行流程

这里写图片描述

PS:之前使用的都是-2方式

简单的例子

命令:awk ‘BEGIN{print “this is begin”} {print “this is main”} END{print “this is end”}’ sample.txt

这里写图片描述

分析-可以简单的理解为执行了以下main方法

这里写图片描述

一般的例子

命令:awk ‘BEGIN{printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,”FILENAME”,”ARGC”,”FNR”,”FS”,”NF”,”NR”,”OFS”,”ORS”,”RS”;printf “———————————————\n”} {printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS} END{printf “———————————————\n”}’ sample.txt

这里写图片描述

以文件的方式执行awk脚本
创建文件 score.txt,内容如下

Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62

创建文件 calc.awk,内容如下
#!/bin/awk -f

BEGIN {
    math = 0
    english = 0
    computer = 0

    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
    printf "---------------------------------------------\n"
}

{
    math+=$3
    english+=$4
    computer+=$5
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}

END {
    printf "---------------------------------------------\n"
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}

这里写图片描述

执行awk脚本

命令:awk -f calc.awk score.txt

这里写图片描述

PS: -f 加载文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值