grep一个文件,只打印行

时间:2015-06-11 00:21:36

标签: linux shell

文件内容"测试":

[]# 0-CPU4    8.9%,   9336/832, 0x5ffe9b88--0x5ffec000
[]# 0-CPU0    13.5%, aa: 4/3, xvl: 35
[]# 0-CPU1    8.6%, SM: 1/4, ovl: 60
[]# 0-CPU0    38.8%, SM: 1/4, ovl: 62

形成这个文件,我想要最后 CPU0的百分比,即38(忽略小数点)

我使用下面的shell命令工作正常,比如知道是否有更好的方法。

grep CPU0 test | tail -1 | awk '/0-CPU0/ {print $3}' | sed 's/\..*//'
#above command prints "38"

2 个答案:

答案 0 :(得分:3)

假设您的数据位于名为test的文件中:

cat test | grep CPU0 | tail -1 | awk '{ printf("%d", $3) }'

grep CPU0 test | tail -1 | awk '{ printf("%d", $3) }' - condensed

awk ' /CPU0/ {a=$3} END{ printf("%d", a) }' test - more condensed

它的作用:

  • cat将输出测试文件中的所有行
  • grep CPU0仅输出包含CPU0
  • 的那些行
  • tail -1将给出grep输出的最后一行
  • awk将按空格分割[]# 0-CPU0 38.8%, SM: 1/4, ovl: 62
  • 第一项是[]#,第二项是0-CPU0,第三项是38.8%
  • awk的printf %d只会给你38

答案 1 :(得分:0)

$ awk '/CPU0/{last=$3} END{sub(/[.].*/,"",last); print last}' test
38

如何运作

  • /CPU0/{last=$3}

    每当我们到达包含CPU0的行时,我们会将第三个字段分配给变量last

  • END{sub(/[.].*/,"",last); print last}

    在文件末尾,无论文件中出现CPU0多次,last都包含最后CPU0行的值。 sub命令删除小数点及其后的所有内容。然后,我们打印last