Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何根据第6个字段内容对行进行grep_Linux_Bash_Awk_Sed_Grep - Fatal编程技术网

Linux 如何根据第6个字段内容对行进行grep

Linux 如何根据第6个字段内容对行进行grep,linux,bash,awk,sed,grep,Linux,Bash,Awk,Sed,Grep,我想知道如何根据mem使用情况过滤线路:我想只找到(RES mem使用)超过5GB的PID 明确地说,我有以下几行 20697 user 20 0 357m 24m 19m S 19.0 0.1 887:15.00 pulseaudio 13017 user 20 0 8381m 3.7g 35m S 127.7 7.9 803:11.96 MATLAB 12654 user 20 0 11.2g 6.1g 10m S 104.8 13.0 784:4

我想知道如何根据mem使用情况过滤线路:我想只找到(RES mem使用)超过5GB的PID

明确地说,我有以下几行

20697 user    20   0  357m  24m  19m S 19.0  0.1 887:15.00 pulseaudio
13017 user    20   0 8381m 3.7g  35m S 127.7  7.9 803:11.96 MATLAB
12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
3088 user    20   0 17.4g  12g  11m S 101.0 26.3   2043:48 MATLAB
12548 user    20   0 8797m 3.5g  13m S 101.0  7.4 802:21.00 MATLAB
12785 user    20   0 8543m 3.6g  35m S 101.0  7.6 804:36.81 MATLAB
12909 user    20   0 12.1g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB
我只想grep第6个字段大于5GB的行

编辑:注意排序并不重要。仅选择超出阈值的行非常重要


谢谢

不能从命令行使用排序选项,但可以使用变通方法来完成此操作

  • 启动顶部(正常模式)
  • 设置顺序(按存储器顺序:O n)
  • 写入配置文件(W)
  • 退出顶部
  • 使用流输入和grep
  • 对于订购或其他操作,请选择awk

    • 如果您不介意使用awk

      $ cat n.txt
      20697 user    20   0  357m  24m  19m S 19.0  0.1 887:15.00 pulseaudio
      13017 user    20   0 8381m 3.7g  35m S 127.7  7.9 803:11.96 MATLAB
      12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
      3088 user    20   0 17.4g  12g  11m S 101.0 26.3   2043:48 MATLAB
      12548 user    20   0 8797m 3.5g  13m S 101.0  7.4 802:21.00 MATLAB
      12785 user    20   0 8543m 3.6g  35m S 101.0  7.6 804:36.81 MATLAB
      12909 user    20   0 12.1g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
      13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB
      
      $ awk '{if($6>=5) {print}}' n.txt
      12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
      12909 user    20   0 12.1g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
      13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB
      

      使用
      gawk

      $ cat n.txt
      20697 user    20   0  357m  24m  19m S 19.0  0.1 887:15.00 pulseaudio
      13017 user    20   0 8381m 3.7g  35m S 127.7  7.9 803:11.96 MATLAB
      12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
      3088 user    20   0 17.4g  12g  11m S 101.0 26.3   2043:48 MATLAB
      12548 user    20   0 8797m 3.5g  13m S 101.0  7.4 802:21.00 MATLAB
      12785 user    20   0 8543m 3.6g  35m S 101.0  7.6 804:36.81 MATLAB
      12909 user    20   0 12.1g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
      13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB
      
      $ gawk '
      BEGIN{
          k=1024;
          m["k"]=k;
          m["m"]=k*k;
          m["g"]=k*k*k;
      }
      {
          patsplit($6, a, "([0-9.]*)|([kmg])");
          value=a[1]*m[a[2]];
          if (value>5*k*k*k) print;
      }' n.txt 
      
      12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
      3088 user    20   0 17.4g  12g  11m S 101.0 26.3   2043:48 MATLAB
      12909 user    20   0 12g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
      13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB
      
      更优化(不太通用)的版本:


      3088用户20 0 17.4g 12g 11m S 101.0 26.3 2043:48 MATLAB
      也应该被打印出来。几乎,它需要首先选择第6个字段以“g”结尾,然后确保其值大于5。既然它已经转换了顶部的大小,为什么还要进行转换呢?你可以搜索g。如果它在最后说m,那么它比gig还小,所以你的转换是对cpu的浪费。有什么错误吗?全部/无)?谢谢。短小而优雅。
      $ cat n.txt
      20697 user    20   0  357m  24m  19m S 19.0  0.1 887:15.00 pulseaudio
      13017 user    20   0 8381m 3.7g  35m S 127.7  7.9 803:11.96 MATLAB
      12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
      3088 user    20   0 17.4g  12g  11m S 101.0 26.3   2043:48 MATLAB
      12548 user    20   0 8797m 3.5g  13m S 101.0  7.4 802:21.00 MATLAB
      12785 user    20   0 8543m 3.6g  35m S 101.0  7.6 804:36.81 MATLAB
      12909 user    20   0 12.1g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
      13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB
      
      $ gawk '
      BEGIN{
          k=1024;
          m["k"]=k;
          m["m"]=k*k;
          m["g"]=k*k*k;
      }
      {
          patsplit($6, a, "([0-9.]*)|([kmg])");
          value=a[1]*m[a[2]];
          if (value>5*k*k*k) print;
      }' n.txt 
      
      12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
      3088 user    20   0 17.4g  12g  11m S 101.0 26.3   2043:48 MATLAB
      12909 user    20   0 12g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
      13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB
      
      $ awk '$6 ~ /^[0-9.]*g$/{if((0 + $6)>5) print}' n.txt
      
      $ awk '$6~/g/ && ($6+0)>5' file
      12654 user    20   0 11.2g 6.1g  10m S 104.8 13.0 784:41.07 MATLAB
      3088 user    20   0 17.4g  12g  11m S 101.0 26.3   2043:48 MATLAB
      12909 user    20   0 12.1g 5.5g  28m S 99.1 11.8 796:01.45 MATLAB
      13154 user    20   0 10.1g 5.6g  10m S 99.1 11.8 797:07.14 MATLAB