Как сопоставить самое раннее и последнее время запуска и распечатать их вместе с соответствующими деталями? - PullRequest
0 голосов
/ 30 марта 2019

Мне нужно распечатать самое раннее и самое позднее время запуска для каждого пользователя вместе с соответствующей информацией, используя awk. Мне не разрешено использовать сортировку. Если есть связь для самого раннего или самого раннего времени запуска, то возьмите тот, с UID, который идет первым в алфавитном порядке.

Это то, что я пробовал до сих пор:

BEGIN { }
{
   if( $5 <= $5 ) {
     lateTime = $5;
   }
   else {
     earlyTime = $5;
   }
END {
    print("Earliest Start Time:", $1, $2, $3, $4, earlyTime, $5, $6, $7);
    print("Latest Start Time:", $1, $2, $3, $4, lateTine, $5, $6, $7);
}

Я пытался сравнить 5-е поле с самим собой, как оно проходит итерацию, но у меня проблемы с логикой всего этого. Любая помощь приветствуется.

Мне дали этот текстовый файл.

UID   PID  PPID C STIME TTY    TIME     CMD
adz110 5344 5334 0 08:47 pts/2  00:00:00 bash
dmq292 6908 6854 0 08:53 pts/1  00:00:00 bash
adz110 7227 7150 0 08:54 pts/9  00:00:00 who
erg474 7466 7461 0 08:54 pts/10 00:00:00 ls
dmq292 7966 7960 0 08:55 pts/13 00:00:00 assign1 . sh if of
xle135 8636 8628 0 08:58 pts/15 00:00:00 bash
xle135 8983 8636 0 08:59 pts/15 00:00:00 ssh ctf . cs . utsarr . net
zeh458 9057 1980 0 08:59 pts/7  00:00:00 vim prog . c

и после этого он должен выглядеть так:

Earliest Start Time:
adz110 5344 5334 0 08:47 pts/2 00:00:00 bash
Latest Start Time:
xle135 8983 8636 0 08:59 pts/15 00:00:00 ssh ctf.cs.utsarr.net

Ответы [ 2 ]

2 голосов
/ 30 марта 2019

Попробуйте это:

awk 'FNR==1{next} FNR==2{timeE=timeL=$5;lineE=lineL=$0;} timeE>$5{lineE=$0;timeE=$5} timeL<$5{lineL=$0;timeL=$5} END{print "Earliest Start Time:\n" lineE "\nLatest Start Time:\n" lineL}' file

Для удобства чтения вставьте несколько строк:

awk '
FNR==1{next}
FNR==2{
    timeE=timeL=$5;
    lineE=lineL=$0;
} 

timeE>$5{
    lineE=$0;
    timeE=$5
} 

timeL<$5{
    lineL=$0;
    timeL=$5
} 

END{
    print "Earliest Start Time:\n" lineE "\nLatest Start Time:\n" lineL
}' file
0 голосов
/ 31 марта 2019

Учитывая введенные вами данные, все, что вам нужно:

$ awk 'FNR==2{beg=$0} !seen[$5]++{end=$0} END{print "Earliest" ORS beg ORS "Latest" ORS end}' file
Earliest
adz110 5344 5334 0 08:47 pts/2  00:00:00 bash
Latest
xle135 8983 8636 0 08:59 pts/15 00:00:00 ssh ctf . cs . utsarr . net

Если этого недостаточно, обновите свой вопрос, чтобы обеспечить более по-настоящему репрезентативный пример ввода / вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...