用awk过滤awk系统输出?
Filter awk system output with awk?
我需要使用 awk 来查看哪些用户登录了计算机,用他们的名字创建一个文件,并在该文件中打印他们 运行 进程的 pid。我用过这个,但它不起作用:
who | awk '{for(i = 0; i < NR; i++)
system("ps -u " "| tail +2 | awk '{print }' >" ".log")
}'
有什么办法吗?
非常感谢!
为了实现使用 awk
创建这些文件的目标,我将从 ps
而不是 who
开始。这样,ps
会做更多的工作,而 awk
可以做的更少。这是一个可能对您有用的示例。 (显然没有保证!)
ps aux | awk 'NR>1 {system("echo " " >> " ".txt")}'
讨论:
命令ps aux
打印一个table描述每个活动进程,一次一行。每行的第一列包含进程用户的名称,第二列包含其 PID。该行还包含许多其他信息,您可以在改进脚本时使用这些信息。这就是您输入 awk
的内容。 (所有这些对于 Linux 和 BSD 都是正确的。在 Cygwin 中,格式不同。)
在 awk
中,模式 NR>1
去掉了输出的第一行,其中包含 table headers。此行对于您希望 awk
生成的文件没有用。
对于ps aux
输出中的所有其他行,awk
将当前进程的PID(即</code>)添加到文件<code>username.txt
,对 username
使用 </code>。因为我们附加 <code>>>
而不是用 >
覆盖,所以用户 username
的所有 PID 运行 最终都被列出,一次一行,在文件 username.txt
.
更新(who
时的替代方法)
如果使用 who
是强制性的,如对原始 post 的评论中所述,我将使用 awk
从 [=14] 的输出中删除不需要的行和列=] 和 ps
.
for user in $(who | awk 'NR>1 {print }')
do
ps -u "$user" | awk 'NR>1' > "$user".txt
done
对于想知道 $user
周围的 double-quotes 是什么意思的读者:这些用于防止通配(如果 $user
包含星号 (*
))和单词拆分(如果 $user
包含空格)。
为了读者可以更自由地选择适合他们工作的工具,我将保留我原来的答案。
这是你的想法吗?
我需要使用 awk 来查看哪些用户登录了计算机,用他们的名字创建一个文件,并在该文件中打印他们 运行 进程的 pid。我用过这个,但它不起作用:
who | awk '{for(i = 0; i < NR; i++)
system("ps -u " "| tail +2 | awk '{print }' >" ".log")
}'
有什么办法吗?
非常感谢!
为了实现使用 awk
创建这些文件的目标,我将从 ps
而不是 who
开始。这样,ps
会做更多的工作,而 awk
可以做的更少。这是一个可能对您有用的示例。 (显然没有保证!)
ps aux | awk 'NR>1 {system("echo " " >> " ".txt")}'
讨论:
命令
ps aux
打印一个table描述每个活动进程,一次一行。每行的第一列包含进程用户的名称,第二列包含其 PID。该行还包含许多其他信息,您可以在改进脚本时使用这些信息。这就是您输入awk
的内容。 (所有这些对于 Linux 和 BSD 都是正确的。在 Cygwin 中,格式不同。)在
awk
中,模式NR>1
去掉了输出的第一行,其中包含 table headers。此行对于您希望awk
生成的文件没有用。对于
ps aux
输出中的所有其他行,awk
将当前进程的PID(即</code>)添加到文件<code>username.txt
,对username
使用</code>。因为我们附加 <code>>>
而不是用>
覆盖,所以用户username
的所有 PID 运行 最终都被列出,一次一行,在文件username.txt
.
更新(who
时的替代方法)
如果使用 who
是强制性的,如对原始 post 的评论中所述,我将使用 awk
从 [=14] 的输出中删除不需要的行和列=] 和 ps
.
for user in $(who | awk 'NR>1 {print }')
do
ps -u "$user" | awk 'NR>1' > "$user".txt
done
对于想知道 $user
周围的 double-quotes 是什么意思的读者:这些用于防止通配(如果 $user
包含星号 (*
))和单词拆分(如果 $user
包含空格)。
为了读者可以更自由地选择适合他们工作的工具,我将保留我原来的答案。
这是你的想法吗?