gpt4 book ai didi

bash - 如何输出按用户排序的命令列表?

转载 作者:行者123 更新时间:2023-11-29 09:24:46 25 4
gpt4 key购买 nike

我正在尝试按运行它们的用户排序运行的进程列表。我有一个看起来像这样的输入文件:

1 UID PID PPID C STIME TTY TIME CMD
2 adz110 5344 5334 0 08:47 pts /2 00:00:00 bash
3 dmq292 6908 6854 0 Jun04 pts /1 00:00:00 bash
4 adz110 7227 7150 0 Jul11 pts /9 00:00:00 who
5 erg474 7466 7461 0 08:54 pts /10 00:00:00 ls
6 dmq292 7966 7960 0 Jun04 pts /13 00:00:00 assign1 . sh if of
7 xle135 8983 8636 0 08:59 pts /15 00:00:00 ssh ctf . cs . utsarr . net
8 zeh458 9057 1980 0 08:59 pts /7 00:00:00 vim prog . c
9 rslavin 9150 9139 0 08:59 pts /16 00:00:00 ps - af
10 xle135 8636 8628 0 08:58 pts /15 00:00:00 bash

不幸的是,我无法使用排序命令的任何选项来完成此作业。我可以使用排序,只是没有选项。首先,我必须为此使用 awk。我的输出非常接近我的需要,只是不完全在那里。打印出来是这样的:

User: adz110
bash
User: dmq292
bash

User: erg474
ls

User: xle135
ssh
User: zeh458
vim
User: rslavin
ps

因此,它不再列出 adz110、dmq292 和 xle135 两次。但是,每个用户运行的第二个命令不存在。修补它,我确实让它打印出该信息,但它是整行,它会在我需要的地方打印出一个用户。

gawk '/^[a-z]/ { if(!x[$1]++) print "User: "($1)"\n\t""   "$8; else if(x[$1]++) print "\t   "x[$NF] };

'

这应该是最终结果:

User : adz110
2 bash
3 who
4 User : dmq292
5 bash
6 assign1 . sh if of
7 User : erg474
8 ls
9 User : xle135
10 bash
11 ssh ctf . cs . utsarr . net
12 User : zeh458
13 vim prog . c

最佳答案

能否请您尝试以下(使用 sort + awk 组合)。

EDIT1:根据 Ed 先生的好建议,我添加了以下命令,这将确保在时间进入命令内部时它不应删除它们。

让我们考虑以下是 Input_file:

cat Input_file
1 UID PID PPID C STIME TTY TIME CMD
2 adz110 5344 5334 0 08:47 pts /2 00:00:00 bash
3 dmq292 6908 6854 0 Jun04 pts /1 00:00:00 bash
4 adz110 7227 7150 0 Jul11 pts /9 00:00:00 who
5 erg474 7466 7461 0 08:54 pts /10 00:00:00 ls
6 dmq292 7966 7960 0 Jun04 pts /13 00:00:00 assign1 . sh if of
7 xle135 8983 8636 0 08:59 pts /15 00:00:00 ssh ctf . cs . utsarr . net
8 zeh458 9057 1980 0 08:59 pts /7 00:00:00 vim prog . c
9 rslavin 9150 9139 0 08:59 pts /16 00:00:00 ps - af
10 xle135 8636 8628 0 08:58 pts /15 00:00:00 bash
4 adz110 7227 7150 0 Jul11 pts /9 00:00:00 grep 'pts /7 '11:00 foo'
4 adz110 7227 7150 0 Jul11 pts /9 00:00:00 grep 1 UID PID PPID C STIME TTY TIME CMD

现在代码如下:

sort -k2 Input_file | 
awk '
$0 ~ /^1 UID PID PPID C STIME TTY TIME CMD$/{
next
}
prev!=$2 && prev{
print "user: " prev ORS "\t" val
prev=val=""
}
{
prev=$2
match($0,/[0-9][0-9]:[0-9][0-9]:[0-9][0-9].*/)
match_val=substr($0,RSTART+RLENGTH)
val=(val?val ORS "\t":"")match_val
}
END{
if(prev){
print "user: " prev ORS "\t" val
}
}'

输出如下:

user:  adz110
bash
grep 1 UID PID PPID C STIME TTY TIME CMD
grep 'pts /7 '11:00 foo'
who
user: dmq292
bash
assign1 . sh if of
user: erg474
ls
user: rslavin
ps - af
user: xle135
bash
ssh ctf . cs . utsarr . net
user: zeh458
vim prog . c


sort -k2 Input_file | 
awk '
$0 ~ /UID PID PPID C STIME TTY TIME CMD/{
next
}
prev!=$2 && prev{
print "user: " prev ORS "\t" val
prev=val=""
}
{
prev=$2
sub(/.*:00 /,"")
val=(val?val ORS "\t":"")$0
}
END{
if(prev){
print "user: " prev ORS "\t" val
}
}'

输出如下。

user:   adz110
bash
who
user: dmq292
bash
assign1 . sh if of
user: erg474
ls
user: rslavin
ps - af
user: xle135
bash
ssh ctf . cs . utsarr . net
user: zeh458
vim prog . c

关于bash - 如何输出按用户排序的命令列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58255704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com