我需要使用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
答案 0 :(得分:2)
尝试一下:
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
答案 1 :(得分:0)
鉴于您提供的输入是:
$ 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
如果这还不够,请更新您的问题以提供更真实的代表性样本输入/输出。