2013-05-11 54 views
1

请你能告诉我怎样才能通过各自在ps axo %mem,pid,euser,cmd | sort -nr | head -n 10输出发现行的循环,使新的输出包含字符串“NEW_LINE”在每行的结束?迭代通过AWK行并追加字符串

我尝试以下,但它并不总是输出完全取决于内容的行中的量数据:

ps axo %mem,pid,euser,cmd | sort -nr | head -n 10 | awk '{print $1"|"$2"|"$3"|"$4"|"$5" new_line "}'

电流输出:

15.9|1077|git|sidekiq|2.7.5 new_line 
14.0|878|git|unicorn_rails|master new_line 
13.3|1090|git|unicorn_rails|worker[1] new_line 
13.3|1088|git|unicorn_rails|worker[0] new_line 
3.9|716|mysql|/usr/sbin/mysqld| new_line 
1.2|3412|max|-bash| new_line 
1.1|919|root|/usr/bin/python|/usr/bin/fail2ban-server new_line 
1.0|746|www-data|php-fpm:|pool new_line 
1.0|745|www-data|php-fpm:|pool new_line 
1.0|744|www-data|php-fpm:|pool new_line 

的预期输出(而不是空格,会出现'|'):

15.8 1077 git  sidekiq 2.7.5 gitlab [0 of 25 busy] new_line                                        
14.0 878 git  unicorn_rails master -c /home/git/gitlab/config/unicorn.rb -E production new_line            
13.3 1090 git  unicorn_rails worker[1] -c /home/git/gitlab/config/unicorn.rb -E production new_line           
13.3 1088 git  unicorn_rails worker[0] -c /home/git/gitlab/config/unicorn.rb -E production new_line 
3.9 716 mysql /usr/sbin/mysqld new_line 
1.2 3412 max  -bash new_line 
1.1 919 root  /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock new_line 
1.0 746 www-data php-fpm: pool www new_line           
1.0 745 www-data php-fpm: pool www new_line           
1.0 744 www-data php-fpm: pool www new_line 

谢谢, 最大。

+1

将'ps axo%mem,pid,euser,cmd | sort -nr“,因为这将是awk命令的输入,加上您希望从给定输入的awk中看到的输出。 – 2013-05-11 16:14:48

+0

@EdMorton我按照你的要求完成了。 – 2013-05-11 16:25:48

回答

1
$ ps axo %mem,pid,euser,cmd \ 
    | sort -nr \ 
    | awk -v OFS="|" '{$1=$1; print $0 " newline"} NR==10{exit}' 
+0

完美,谢谢。 – 2013-05-11 16:26:09

+1

你不需要在排序和awk之间使用管道,只需将awk调整为:awk -v OFS =“|” “NR <= 10 {$ 1 = $ 1;打印$ 0“新行”}''或'awk -v OFS =“|” “{$ 1 = $ 1;打印$ 0“newline”} NR == 10 {exit}''如果效率是一个问题。 – 2013-05-11 17:09:52