AWK命令来筛选需要的数据

2019-07-19  本文已影响0人  greye

1、了解 $0 的意义,$0 等于是输入。

 XX@MacPro  ~  df -h |awk '{print $0}'
Filesystem      Size   Used  Avail Capacity iused               ifree %iused  Mounted on
/dev/disk2s1   1.0Ti  275Gi  759Gi    27% 1962828 9223372036852812979    0%   /
devfs          340Ki  340Ki    0Bi   100%    1179                   0  100%   /dev
/dev/disk2s4   1.0Ti  2.0Gi  759Gi     1%       1 9223372036854775806    0%   /private/var/vm
map -hosts       0Bi    0Bi    0Bi   100%       0                   0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0                   0  100%   /home
/dev/disk3s1    14Gi  9.3Gi  5.2Gi    65%       0                   0  100%   /Volumes/KINGSTON

2、了解 $2 的意义,$2 等于是每一行的第二个元素

 XX@MacPro  ~  df -h |awk '{print $2}'
Size
1.0Ti
340Ki
1.0Ti
-hosts
auto_home
14Gi

3、awk命令中所有“动作”,都必须在 { } 内。

通常awk的命令格式是:awk '脚本’ 输入文件
再更进一步具体化:awk '模式 {动作}’ 输入文件
或者和其他命令组合:其他命令 | awk '模式 {动作}’

 XX@MacPro  ~  df -h |awk 'print $2'
awk: 命令行:1: print $2
awk: 命令行:1: ^ syntax error

4、awk命令匹配符合模式的行

 ✘ XX@MacPro  ~  df -h |awk '/dev/'
/dev/disk2s1   1.0Ti  275Gi  759Gi    27% 1962828 9223372036852812979    0%   /
devfs          340Ki  340Ki    0Bi   100%    1179                   0  100%   /dev
/dev/disk2s4   1.0Ti  2.0Gi  759Gi     1%       1 9223372036854775806    0%   /private/var/vm
/dev/disk3s1    14Gi  9.3Gi  5.2Gi    65%       0                   0  100%   /Volumes/KINGSTON

注意:所有正则表达式都需要在/ /内,即:/正则表达式/,否则会如下图出错。

 ✘ XX@MacPro  ~  df -h |awk '/dev'
awk: 命令行:1: /dev
awk: 命令行:1:  ^ 未终止的正则表达式

注意:想要在规则中匹配“/”,需要进行转义。


 XX@MacPro  ~  df -h |awk '//dev/'
awk: 命令行:2: //dev/
awk: 命令行:2:       ^ 未预期的新行或字符串结束
 ✘ XX@MacPro  ~  df -h |awk '/\/dev/'
/dev/disk2s1   1.0Ti  275Gi  759Gi    27% 1962828 9223372036852812979    0%   /
devfs          340Ki  340Ki    0Bi   100%    1179                   0  100%   /dev
/dev/disk2s4   1.0Ti  2.0Gi  759Gi     1%       1 9223372036854775806    0%   /private/var/vm
/dev/disk3s1    14Gi  9.3Gi  5.2Gi    65%       0                   0  100%   /Volumes/KINGSTON

注意:awk命令的“模式”与“动作”都被包裹在一组单引号内不可用两组。否则错误如下:

 XX@MacPro  ~  df -h |awk '/m$/' '{print $1}'
awk: 致命错误:无法以读模式打开文件“{print $1}”(No such file or directory)
 ✘ XX@MacPro  ~  df -h |awk '/m$/ {print $1}'
/dev/disk2s4

下面是在使用AWK命令的“范围模式”,开头匹配/dev/, 结束匹配/m$/。

XX@MacPro  ~  df -h |awk '/dev/,/m$/ {print $1}'
/dev/disk2s1
devfs
/dev/disk2s4
/dev/disk3s1

5、AWK命令匹配多个模式条件。

注意:awk支持的逻辑表达式AND(&&),OR(||)等等。

XX@MacPro  ~  df -h |awk '/dev/AND/m$/ {print $1}'
awk: 命令行:1: /dev/AND/m$/ {print $1}
awk: 命令行:1:             ^ 未终止的正则表达式

 ✘ XX@MacPro  ~  df -h |awk '/dev/&/m$/ {print $1}'
awk: 命令行:1: /dev/&/m$/ {print $1}
awk: 命令行:1:      ^ syntax error

 ✘ XX@MacPro  ~  df -h |awk '/dev&m$/ {print $1}'
 XX@MacPro  ~  df -h |awk '/dev|m$/ {print $1}'
/dev/disk2s1
devfs
/dev/disk2s4
/dev/disk3s1

XX@MacPro  ~  df -h |awk '/dev&&m/ {print $1}'
XX@MacPro  ~  df -h |awk '/dev/ {print $1}'
/dev/disk2s1
devfs
/dev/disk2s4
/dev/disk3s1

XX@MacPro  ~  df -h |awk '/dev/&&/m$/ {print $1}'
/dev/disk2s4
XX@MacPro  ~  df -h |awk '/dev/&&/m$/ '
/dev/disk2s4   1.0Ti  2.0Gi  759Gi     1%       1 9223372036854775806    0%   /private/var/vm

6、连续多个动作的连接

1)使用连续连个多个{ }:{A动作} {B动作}。
2)使用在{ }内分号隔离:{A动作; B动作}。

  XX@MacminiPro  ~  df -h |awk '{print $1} {print $2}'
Filesystem
Size
/dev/disk2s1
1.0Ti
devfs
340Ki
/dev/disk2s4
1.0Ti
map
-hosts
map
auto_home
/dev/disk3s1
14Gi

 XX@MacminiPro  ~  df -h |awk '{print $1 ;print $2}'
Filesystem
Size
/dev/disk2s1
1.0Ti
devfs
340Ki
/dev/disk2s4
1.0Ti
map
-hosts
map
auto_home
/dev/disk3s1
14Gi

注意:END这个不理解下次继续更新。。

 XX@MacminiPro  ~  df -h |awk '{print $1} END {print $2}'
Filesystem
/dev/disk2s1
devfs
/dev/disk2s4
map
map
/dev/disk3s1
14Gi
上一篇 下一篇

猜你喜欢

热点阅读