awk - 模式匹配然后第一行然后是最后一列

时间:2018-04-09 09:57:18

标签: awk

我的输出如下,使用awk我需要使用模式匹配" Memory"然后打印第一行,然后打印最后一列/ 1024,

结果应为32或32768,这可以通过不同的命令序列来实现,例如,

grep "Memory" /var/tmp/file.out | tail -1 |  awk '{print $NF/1024}'

上面的命令会调用很多次,所以我在awk中寻找一个命令。

 Data:
     Status = Running
     Memory (MB) = 32768
     Max. Memory (MB) = 32768
     Processors = 16
     Max. Processors = 16
     Priority = 50
     Processor Cap = 100
     High Availability = No

2 个答案:

答案 0 :(得分:1)

问题中shell管道的awk实现将是:

awk '/Memory/{v=$NF;f=1}END{if(f)print v/1024}' file

对于示例输入,它将打印

32

答案 1 :(得分:0)

我认为需要"打印第一行"这就是你想要的?

$ awk 'flush() { if (p) { print c; print r; p = 0 } }
       BEGIN { p = 0 }
       /^[^:]+:/   { flush(); c = $0 }
       /Memory.*=/ { r = $NF/1024; p = 1 }
       END   { flush() }
       ' /var/tmp/file.out
 Data:
32