当前位置: 技术问答>linux和unix
问一个关于awk的问题哈
来源: 互联网 发布时间:2017-05-21
本文导语: 2test.txt内容如下: Linux 3.11.0-12-generic (astlubuntudell) 04/11/2014 _x86_64_ (4 CPU) Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await...
2test.txt内容如下:
执行
输出如下:
Q1:第一行应该不匹配的,怎么也输出了$1和$4?
Q2:Device那行怎么输出了两次?
Linux 3.11.0-12-generic (astlubuntudell) 04/11/2014 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdd 481.18 0.00 191.82 0.00 2.84 0.00 30.36 0.03 0.17 0.17 0.12 0.13 2.51
sde 481.17 0.00 191.90 0.00 2.84 0.00 30.35 0.03 0.16 0.16 0.12 0.13 2.47
执行
awk -F '[ ]+' '/Device*/ {print $1,$4} /sd*/ {print $1,$4}' 2test.txt
输出如下:
Linux 04/11/2014
Device: r/s
Device: r/s
sdd 191.82
sde 191.90
Q1:第一行应该不匹配的,怎么也输出了$1和$4?
Q2:Device那行怎么输出了两次?
|
跟你用的sd*有关系 我测试过
但是原因说不出来,如二楼所说,遇到这种情况,换正则表达式吧。
上面这种正则表达式和楼上也一样,也谢谢楼上。
表示的意思都是 ,文本中含有Device,后面跟上任意多个任意字符的行以及 文本中含有sd,后面跟上任意多个任意字符的行.
这样表达更精确,跟上 . 后
但是原因说不出来,如二楼所说,遇到这种情况,换正则表达式吧。
[root@ tmp]# awk -F'[ ]+' '/Device.*/{print $1,$4} /sd.*/ {print $1,$4}' 1.txt
Device: r/s
sdd 191.82
sde 191.90
上面这种正则表达式和楼上也一样,也谢谢楼上。
表示的意思都是 ,文本中含有Device,后面跟上任意多个任意字符的行以及 文本中含有sd,后面跟上任意多个任意字符的行.
这样表达更精确,跟上 . 后
|
sd* 表示 s 后面跟0个或多个d,所以只要一行中有s,就会匹配。