Linux——awk实践

awk是一种专门处理类似“二维表”结构数据的命令

awk按行进行读取,并对每行进行切片(默认以空格或Tab为分隔符)

awk有5种实现方式,下文有列出,初学会觉得像茴香豆的茴有几种写法,个人觉得不在于记忆,而在于对实现方式的理解,理解这几种实现方式也是在理解linux命令的组织形式。

设有一文件名为data.txt
data.txt
a         1         2
b         3         5
c         3         0
awk命令单引号(注意:只能是单引号)中填写过滤条件与执行命令(执行命令写在花括号内)

#----------方式一 基础版------------
awk '$3>1 {print $1,$2*$3}' data.txt

#----------方式二 管道--------------
cat data.txt | awk '$3>1 {print $1,$2*$3}'

方式三四五都用到了可执行文件

首先写好可执行文件prog

#!/usr/bin/awk -f 
$3 > 0 {print $1,$2*$3}
#--------方式三 读取文件内容--------
awk -f prog data.txt
#---------方式四 读取文件结合管道---------
cat data.txt | awk -f prog
#---------方式五 给文件加执行权限后运行---------
chmod +x prog
cat data.txt | ./prog

# chomod +x 可以给一个文件执行权限即x
# chomod -x 就可以去掉执行权限

注意点

awk -F [分隔符] 可以将分割符改成任意值(默认为空格和Tab)

awk -v [var=val] 可以设置一初始变量var,令其值为val

NR 记录行号

NF 记录当前行内字段数

$0 记录当前整行内容

花括号内支持使用C语言

BEGIN{} 关键字使花括号内内容在执行前就先执行

END{}关键字使花括号内内容在执行最后执行 

实践

1.针对以下文本内容的操作,请写出相关的 awk 命令 

Beth   4.00  0 

Dan    3.75  0 

Kathy  4.00  10 

Mark   5.00  20 

Mary   5.50  22 

Susie  4.25  18 

  1. 当第 3 列大于 0 时,输出文本中对应行的第 1 列和第 2 列与第 3 列之积 
  2. 统计第 3 列大于 15 的行数,记为 X,并以下列格式输出 “X employees worked more than 15 hours.”
  3. 使用特殊变量 NR、NF,统计输出整个文本的行数、单词数和字符数

将内容保存为data.txt后,输入:

1.

cat data.txt | awk '$3 >0 {print $1,$2*$3}'

2.

awk -v i=0 '$3>15{i++}END{print i,"employees worked more than 15 hours."}' data.txt

 

 

3.

这次使用方法五,首先写好可执行文件p13

#!/usr/bin/awk -f

{

   nc = nc + length($0) +1

   nw = nw +NF

}

END {print NR," lines,",nw," words,",nc," characters."}

chmod +x p13

       cat data.txt | ./p13

2.使用awk统计/etc/passwd文件中

(1)登陆shell为“/sbin/nologin”的用户个数

(2)用户名包含'g'的用户,打印出用户名和UID

(1)cat /etc/passwd | awk -F : -v i=0 '{if($NF=="/usr/sbin/nologin") i=i+1;}END{print i}'

(2)cat /etc/passwd | awk -F : '{print $1,$3}' | awk -F : '/.*g.*/ {print $1,$2}'

         这里用到了正则表达式,若不清楚,请君查看正则表达式相关内容

        3.使用awk统计当前文件夹下,文件总的大小

        ls -l | awk -v size=0 '{size+=$5}END{print "total size:",size,"Bytes"}'

      

        ls -l 命令执行结果:

 

        第五列是文件大小信息,因此直接读取相加即可。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值