例如,
当我输入ps -wef
时,在bash中我会得到:
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获取最终结果?
谢谢。
答案 0 :(得分:4)
ps -wef | awk 'NR>1 {printf("%s ", $2)}END{printf("\n")'
我希望这会有所帮助。
答案 1 :(得分:3)
您也可以使用-o
选项仅获取PID列:
ps --no-headers -eo pid
我放弃了-w
,-f
,因为您认为他们会丢弃对输出的贡献,并使用--no-headers
删除了标题。
答案 2 :(得分:1)
这可能适合你(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