Я пытаюсь получить список запущенных процессов, отсортированный пользователем, который их запускал. у меня есть входной файл, который выглядит следующим образом:
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