删除一切,除了各行的特定索引的内容

问题描述:

例如,删除一切,除了各行的特定索引的内容

在bash当我键入ps -wef我会得到:

UID  PID PPID C STIME TTY   TIME CMD 
root   1  0 0 20:06 ?  00:00:01 /sbin/init 
root   2  0 0 20:06 ?  00:00:00 [kthreadd] 
root   3  2 0 20:06 ?  00:00:00 [ksoftirqd/0] 
root   6  2 0 20:06 ?  00:00:00 [migration/0] 
root   7  2 0 20:06 ?  00:00:02 [watchdog/0] 
root   8  2 0 20:06 ?  00:00:00 [cpuset] 
root   9  2 0 20:06 ?  00:00:00 [khelper] 
root  10  2 0 20:06 ?  00:00:00 [kdevtmpfs] 
root  11  2 0 20:06 ?  00:00:00 [netns] 
root  12  2 0 20:06 ?  00:00:00 [sync_supers] 
root  13  2 0 20:06 ?  00:00:00 [bdi-default] 
root  14  2 0 20:06 ?  00:00:00 [kintegrityd] 
root  15  2 0 20:06 ?  00:00:00 [kblockd] 
root  16  2 0 20:06 ?  00:00:00 [ata_sff] 
root  17  2 0 20:06 ?  00:00:00 [khubd] 
root  18  2 0 20:06 ?  00:00:00 [md] 
root  21  2 0 20:06 ?  00:00:00 [khungtaskd] 

,我知道我想要的列保持,例如我想保持第二列是PID列,最后的结果将是:

1 2 3 6 7 8 9 10 11 12 13 14 15 16 17 18 21 

PS的原始结果的第一行就会被删除。

如何使用sed或awk来获得我的最终结果?

谢谢。

ps -wef | awk 'NR>1 {printf("%s ", $2)}END{printf("\n")' 

我希望这有助于

+0

谢谢!它很棒! –

您还可以使用-o选项仅在第一时间拿到的地方PID列:

ps --no-headers -eo pid 

我放弃了-w-f,因为你会看到他们对输出的贡献,并且用--no-headers删除了标题。

这可能会为你工作(GNU SED):

sed '1d;s/\S*\s*\(\S*\).*/\1/' file 

更灵活的方法:

sed '1d;s/\(\(\S*\)\s*\)\{2\}.*/\2/' file 

因此,如果你想TIME柱:

sed '1d;s/\(\(\S*\)\s*\)\{7\}.*/\2/' file