BASH脚本帮助使用TOP,GREP和CUT

时间:2017-11-12 17:13:38

标签: bash shell grep cut

使用顶部命令重复5次,将结果传递给 Grep 剪切命令以打印 init <的PID / em>屏幕上的进程。

大家好,我有我的代码:

top -n 5 | grep "init" | cut -d" " -f3 > topdata

但我看不到任何输出来验证它是否正常工作。 此外,下一个脚本要求我使用一行命令,该命令显示以兆字节为单位的总内存。我应该将结果从Free to Grep传输到选择或过滤带有模式的行&#34; Total:&#34;然后将结果传递给Cut并显示表示使用的总内存的数字。到目前为止:

free -m -t | grep "total:" | cut -c25-30

也没有获得任何打印返回。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

扩展我的评论:

  1. grep区分大小写。免费说&#34; Total&#34;,你grep&#34;总&#34;。所以没有比赛!无论是gret for&#34; Total&#34;或者使用grep -i。
  2. 当我需要从一条线上得到一个数字时,我更喜欢awk而不是剪切。你不知道这个数字的长度,但你知道它将是Total:之后的第一个数字。所以:
  3. free -m -t | grep "Total:" | awk '{print $2}'

    1. 对于你的top命令,如果你没有init进程(你应该这样做,但它可能不会显示在顶部),只需要grep其他东西来查看你的代码是否正常工作。我用肉桂(跑薄荷)。 top命令是:
    2. top -n 5 | grep "cinnamon" | awk '{print $1}'

      替换&#34;肉桂&#34; by&#34; init&#34;根据您的要求。为什么awk中有1美元?我的顶部将PID放在第一列。相应调整。

      总的来说,当你有一个由某个字符分隔的字符串时,使用cut是很好的。防爆。 aaa; bbb; ccc,你会剪掉-d&#39 ;;&#39;。但这里的数字可能有不同的长度,所以使用cut不是(恕我直言)最好的解决方案。

答案 1 :(得分:0)

init进程有PID 1,没有理由这样做。

为了找到一般过程的PID,我建议:

pidof <name>