前3篇回顾
awk - 简介 Linux 制表好工具
awk-2 Regex搭配浅谈
awk-3 运算符与函数
ls -l
看到当前目录下所有档案跟大小, 档案大小在第5个栏位# BEGIN区块宣告size变数
# COMMAND区括做累加
# END区块做输出
ls -l | awk 'BEGIN{size=0}{size+=$5} END{print "size:" size}'
> size:219312120
# 计算成MB
ls -l | awk 'BEGIN{size=0}{size+=$5} END{print "size:" size/1024/1024 "M"}'
> size:209.152M
# for in loop
awk -F ':' 'BEGIN{count=0}{if ($3 > 100) name[count++]=$1} END{for (idx in name) print idx, name[idx] }' /etc/passwd
> 3 messagebus
> 10 usbmux
> 27 systemd-coredump
> 8 tcpdump
> 6 tss
# for condition loop
awk -F ':' 'BEGIN{count=0}{if ($3 > 100) name[count++]=$1} END{for (idx=0; idx<count;idx++) print idx, name[idx] }' /etc/passwd
> 0 nobody
> 1 systemd-resolve
> 2 systemd-timesync
> 3 messagebus
> 4 syslog
[ ]
也有个空格, 所以其实在$6netstat -anp | awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (idx in sum) print idx, sum[idx]}'
> LISTEN 12
> CONNECTED 1121
ifconfig | awk '{print $2}' | grep -Eo "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
> 172.29.0.1
> 172.31.0.1
> 127.0.0.1
会发现这里有127.0.0.1, 但这ip, 每台电脑必有, 没参考价值, 因此找个方法忽略它
把```lo```开头的行给忽略就好
```RS```是awk的内建变数, 用来指定行的分隔符号, 预设是```\n```换行符号, 遇到\n为一行
这里把RS设置为空字串, 表示要遇到一行空字串才做换行输出; 可以看上图, 2个网卡中间会个空行
这样子就能把多行资料, 一直当成同一行读取, 直到RS指定的行分隔符号
ifconfig | awk 'BEGIN{RS=""}!/lo/{print $6}' | grep -Eo "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
> 172.29.0.1
> 172.31.0.1
# 准备假资料
cat > bb.txt <<EOF
heredoc> UID=1
heredoc> UID=2
heredoc> UID=4
heredoc> UID=3
heredoc> UID=2
heredoc> UID=3
heredoc> EOF
awk -F "=" '!arr[$2]++ {print}' bb.txt
> UID=1
> UID=2
> UID=4
> UID=3
awk是个简单的动态
程序语言, 可以处理复杂的文字处理,
若只是查找其实前篇的grep足以, 但awk能把资料做转换然後输出.
但awk执行效率不是很好,
所以还是比较多人选择用Python、Perl进行大型文件的处理.
但若是内容没几MB, awk就是把精致的小刀, 很方便使用, 其他语言要写好几行, awk可能只需要一行.
提供一篇文章, 快速地把awk给说明演示一次
Awk in 20 Minutes
堆叠(Stack)建立的方法 push: 新增元素 pop: 从顶端移除元素 peek: 查看顶端(...
本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...
推荐扩充套件 Color Highlight 这边跟大家推荐 Color Highlight 这个扩...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 在 E2E 测试中,不仅有选取元素...
HTML是什麽 首先关於 HTML 是网页三兄弟中最容易也是最基础的一种标记语言(markup la...