awk 工作方式: 读取数据文件.每一行视为一条记录. 每笔记录 以字段分割符 分成几个字段. 输出各字段的值.

 如: USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND  root         1  0.0  0.0   164   92 ?        Ss   Apr09   0:01 init [5]

像这种 固定结构的数据. 用awk来处理 非常方便.

如: 下面就可获取 所有行程的pid ➜ Desktop ps auxw |awk '{print $2}' PID 1495 228 1496 1372 774 187

awk 是如何处理 每一笔记录的呢.

awk 常用语法 awk “样式” 文件: 显示符合样式的行. awk ‘{操作}’ 文件: 对每一行都执行 {}里面的操作. awk ‘样式{操作}’ 文件: 对符合样式的数据行. 执行{}中的操作.

awk特殊表达式: begin end

begin end 作用是 给 程序赋予 初始状态 和 程序结束之后 一些稍微工作.

任何Begin{} 内列出的操作 都会在 awk开始扫描之前执行. 任何END{} 内列出的操作 都会在扫描完全部的输入之后执行. 通常 begin 来显示变量和预置的变量. end 来输出最终的结构.

显示

➜ Desktop awk '/Day/' 1.txt console.log(now.getDay()); // 显示含 Day 的数据行

➜ Desktop awk '{print $1,$2}' 1.txt 显示每一行的 第一和第二字段 $1 代表第一字段. $2 代表第二字段… 其他类推

➜ Desktop awk '/Day/{print $1,$2}' 1.txt 显示含有Day 行的 第一和第二字段.

-F 指定分割字符

// 用. 当作字段的分割符号. 注意原来的.会被删除… ➜ Desktop awk -F. '{print $1,$2,$3}' 1.txt
var now = new Date(); console log(now); console log(now getFullYear()); console log(now getMonth()); console log(now getDate()); console log(now getDay()); console log(now getHours()); console log(now getMinutes()); console log(now getSeconds()); console log(now getMilliseconds()); console log(now getTime());

➜ Desktop awk -F. 'BEGIN{OFS="..."}{print $1,$2,$3}' 1.txt var now = new Date();…… console…log(now);… console…log(now…getFullYear()); console…log(now…getMonth()); console…log(now…getDate()); console…log(now…getDay()); console…log(now…getHours()); console…log(now…getMinutes()); console…log(now…getSeconds()); console…log(now…getMilliseconds()); console…log(now…getTime()); // 用.当作分割符, 且用… 代替. 而不是删除. //BEGIN{} 是awk一开始先做 初始化操作: 也就是 设定 OFS=”…”. 变量 OFS的作用是 储存 分割符号. 然后开始用print 打印出 字段.

取得活动网卡的IP

ifconfig 会出来很长一段.很多是你不需要的. 我们要的 IP 只是 inet 字符后面的值. 但是 网卡有很多张. 会出现很多 ip. 这就需要进一步刷选了. 由于激活的网卡都有个 广播地址: 也就是 broadcast

  1. ➜ Desktop ifconfig

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 nd6 options=201<PERFORMNUD,DAD> gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 stf0: flags=0<> mtu 1280 en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 3c:15:c2:d6:0e:fa inet6 fe80::18bc:128a:4188:ee40%en0 prefixlen 64 secured scopeid 0x4 inet 192.168.2.104 netmask 0xffffff00 broadcast 192.168.2.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500 options=60<TSO4,TSO6> ether 72:00:08:c9:9b:20 media: autoselect status: inactive en2: flags=963\<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX\> mtu 1500 options=60\<TSO4,TSO6\> ether 72:00:08:c9:9b:21 media: autoselect status: inactive

  1. ➜ Desktop ifconfig | grep 'inet' inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 inet6 fe80::18bc:128a:4188:ee40%en0 prefixlen 64 secured scopeid 0x4 inet 192.168.2.104 netmask 0xffffff00 broadcast 192.168.2.255 inet6 fe80::4c39:12ff:fe19:6c27%awdl0 prefixlen 64 scopeid 0x9 inet6 fe80::aa87:a64c:5192:5a83%utun0 prefixlen 64 scopeid 0xa inet6 fe80::60c1:4cd2:bbde:11c%utun1 prefixlen 64 scopeid 0xb inet6 fd42:b6ca:ab00:e5fe:60c1:4cd2:bbde:11c prefixlen 64

  2. ➜ Desktop ifconfig | grep 'inet'| grep 'broadcast' inet 192.168.2.104 netmask 0xffffff00 broadcast 192.168.2.255 现在就刷选出来 活动的网卡了. 我们只需要ip 和 广播地址的话 就要用 awk 来筛选字段了.

  3. ➜ Desktop ifconfig | grep 'inet'| grep 'broadcast'| awk '{print $2,$6}' 192.168.2.104 192.168.2.255