awk基本学习

参考:跟老男孩学Linux运维:核心系统命令实战

在线bash:https://c.runoob.com/compile/18

 

awk的默认分隔符是(一个或者多个连续)空格,指标看成是连续空格

 

语法格式:awk [参数] '条件{动作}' 文件

  • 显示某些行
seq 9 | awk 'NR==2,NR==6' 

讲解:显示第2行到第6行,NR表示number of row

  • 给每行加上行号
seq 9 | awk '{print NR,$0}'

讲解:注意输出的时候并不会有逗号,$0表示一整行的内容,这里花括号里面的内容是awk内部命令

前面连个功能点可以合起来写,正好满足了语法格式的所有要素

seq 9 | awk 'NR==2, NR==6 {print NR, $0}'
  • 对文件进行列分割,并且输出某些列
echo 'hello;world;ni;hao
chen;pan;this
xie;juan' > test.txt
awk -F ";" '{print $3,$NF}' test.txt

讲解: -F  ";"表示按照分号分隔每一行,$NF表示最后一列

  • 使用gsub替换
echo 'hello;world;ni;hao
chen;pan;this
xie;juan' > test.txt
awk '{gsub(";", " with ", $0); print $0}' test.txt

讲解:gsub("替换对象","替换成什么内容",哪一列),哪一列默认为$0,即所有列(整行)

  • 综合行号,列分割,输出想要的部分,从而实现过滤和选择
echo '   hello; world;ni; hao
chen;pan;   this
xie; juan' > test.txt
awk -F "[ ;]+" 'NR==2{print $3}' test.txt
  • 数组统计功能
echo 'False
False
True
True' > test.txt
awk '{array[$0]++}END{for(domain in array)print domain, array[domain]}' test.txt

讲解:构建数组,以每一行为key,然后++统计数目,一开始全为0,出现一个增加一个。使用END模式,循环输出

 

  • 输出记录行数
seq 9 | awk 'END{print NR}'
  • 在命令中使用shell变量
R=`awk 'END{print NR}' xx.txt`
awk "NR==$R"'{print $2}' xx.txt

讲解:第一行定义了shell变量记录行数,第二行使用双引号来使用shell变量,输出了文件的最后一行的第二列

注意:在双引号和单引号之间不要有空格

 

  • 将一列赋值给数组
array=($(awk 'NR==1,NR==6{print $2}' xx.txt))
echo ${array[0]}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值