awk配合xargs的一个用法

工作中有时候需要杀类似下面的很多子进程,想单个的杀实在是很困难(尤其是子进程很多时),

有什么好的办法呢?

[root@tesr root]# ps -ef|grep java|grep cn.

root      3994  3993  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      3995  3994  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      3996  3995  0 21:14 ?        00:00:04 /usr/j2sdk1.4.0_01/bin/java cn.c

root      3997  3995  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      3998  3995  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      3999  3995  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      4000  3995  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      4001  3995  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      4002  3995  0 21:14 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

root      4004  3995  1 21:14 ?        00:01:56 /usr/j2sdk1.4.0_01/bin/java cn.c

root      4005  3995  0 21:15 ?        00:00:00 /usr/j2sdk1.4.0_01/bin/java cn.c

其实就是要把这些行的第二列变成横向的,再全部写到kill -9 的后面就行了. 我们知道,

Awk就是用来取列的,但是awk取到的结果是分为多列的,

#ps -ef|grep java|grep cn.|awk {‘print $2’}

3994

3995

3996

3997

3998

3999

4000

4001

4002

4004

4005

如何让这些列变成行呢,xargs就可以!

# ps -ef|grep java|grep cn.|awk {‘print $2’}|xargs

3994 3995 3996 3997 3998 3999 4000 4001 4002 4004 4005

说白了,xarge就是把很多行变为一行!

如想删除数量比较多的文件
ls | xargs -n 20 rm -fr
ls当然是输出所有的文件名(用空格分割)
xargs就是将ls的输出,每20个为一组(以空格为分隔符),作为rm -rf的参数
也就是说将所有文件名20个为一组,由rm -rf删除,这样就不会超过命令行的长度了

再杀的话就很简单了!

Kill -9 3994 3995 3996 3997 3998 3999 4000 4001 4002 4004 4005就行了.

写下这点东西才真正的学会awk和xarge ,大家不妨也试试??

更多关于find,xargs请参考http://www.linuxsir.org/main/?q=node/137#3

暂无评论

发送评论 编辑评论


				
上一篇
下一篇