awk命令

本文详细介绍了awk命令的处理原理,基本语法如BEGIN、pattern、END块,以及变量使用、分割符、行号判断、列数计算等。还展示了awk在文本处理、系统调用和条件控制中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

awk命令

和cut相似,cut小巫

awk大巫

awk处理原理:

一行一行地处理

awk基本语法

awk -F 分割符 ‘/模式/{动作}’输入文件

awk完整语法:

awk BEGIN{commands}pattern{commands}END{commonds}‘file1

先执行BEGIN,从file1读取第一行有无模式匹配,若无则执行{}中的语句,有模式

匹配,若匹配,就执行{}里的语句,不匹配就不执行,接着读取下一行,重复,最后

执行END的语句

一些命令

分割符

1输出分割符: awk -F =awk ‘BEGIN{FS=“:”}’ 加分割符 默认是空白(tab和空格)

OFS输出分割符

cat grade.txt|awk 'BEGIN{OFS="#"} $2>=90{print $1,$2}' OFS自定义的用法 {}之前没有条件,可以加OFS,不用BEGIN

FS输入分割符

NR表示有多少行 从零开始

NR==5,NR==10 从5到10行 ——》 NR>=5&&NR

NR==5||NR==10 5行和10行

NR%5==0 里面要用双等号

NF表示一行有多少列的字段数

awk ‘NR==1{print $0 }’截取第一行

awk 'NR>1{print $0}' NR表示awk处理文本的行号 NR>1 显示行数大于1, $0表示输出整行

cat grade.txt |awk 'NR>1 {sum +=$3}END{print sum}' 截取第三列,并且求和

=awk 'NR>1{print $3}' grade.txt |xargs|tr " " "+"|bc (tr 替换命令)

cat /etc/passwd |awk -F : 'BEGIN{num=0;print "开始统计/etc/passwd文件"}$1 ~ /feng/ || $3 > 1005 {print NR,NF,$1,length($1),$NF,$3;num++}END{print "统计结束",num}'

awk自带length()统计长度

NF表示一行有多少列,是个数字,$NF表示最后一列

awk 'BEGIN{print "阿里舅舅公司股东集资"}{sum +=$2;if( $2>=10 ) print $0}END{print "阿里舅舅公司股东集资总金额:" sum}g' alijiujiu.txt

df |awk '{print NR ,$(NF-1)}'

cat grade.txt |awk 'NR>1 && $2>=90 {print $1,$2}'

awk -F: '$3 ~ /[1-9]{4}/ {print $1,$3 } ' /etc/passwd    [1-9]表示1到9的任意数字 {4}表示出现四次

awk -F: '/^[^h]/{print $1,$7}' /etc/passwd 不是h开头的

awk -F '[:/]' '{print $1,$10}' /etc/passwd 以 :/ 两个作为分割符

==精准匹配 !=不等于 用”“

~模糊匹配 用//

pattern?pattern:pattern

awk -F : '$3 ~ /\/ {print $3}' /etc/passwd $3是三个字符的符合项

||或 && 并 !否

&&优先级高于||

例子:显示用户名长度5到10的用户,并且使用shell为bash,uid大于500,并且统计这样的个数

cat /etc/passwd |awk -F: 'BEGIN{i=0}length($1)>=5&&length($1)500&& /bash$/{i++;print "username:"$1,"uid:"$3}END{print i}'

shell里的变量传递到awk内部,进行使用

1.awk -v

name=hah

echo|awk -v abc=$name '{print abc}' 变量的传递

2使用双引号 $符号需要接 \进行转义

echo |awk -F: "$1 ~ /$name/{print $1,$3}" /etc/passwd

awk用于小数运算

a=3.4 b=4.2

echo|awk "{print $a+$b}" 双引号里面可以引用

这里注意 awk里shell里的数字变量可以直接传到awk里

awk函数

system("date +%F") 获取时间

awk '{now=strftime("%D",systime());print now}' /etc/passwd

strftime("%D",.) 格式化输出

awk -F ":" 'length($2)==0{print $1,"密 码为空",strftime("%D",systime())}' /etc/shadow

awk if语句

if else 中间用;

awk '{if else if else }'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

澈明123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值