删除一切,除了各行的特定索引的内容
问题描述:
在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")'
我希望这有助于
答
您还可以使用-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
谢谢!它很棒! –