【发布时间】:2020-02-04 07:39:14
【问题描述】:
我不知道该怎么做。我的脚本将输出日期/时间本身,而不是包含该值的整行。
输入如下所示:
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
这似乎适用于打印“最早开始时间:Jun04”和“最晚开始时间:08:59”。
min = $5; next} {if ($5 > min) min = $5;}
{max = 0}{if ($5>max) max=$5}
我正在完成整个脚本,如下所示:
sort |
gawk '
$1 !~ /[a-z]{3}[0-9]{3}/ {
next
}
NR==0{min = $5; next} {if ($5 > min) min = $5;}
{max = 0}{if ($5>max) max=$5}
prev!=$1 && prev{
print "User: " prev ORS "\t " val
prev=val=""
}
{
prev=$1
val=(val?val ORS "\t ":"")substr($0, index($0,$8))
} ;
END {
if(prev){
print "User: " prev ORS "\t " val
}; { print "\nEarliest Start Time :\n" } { print min };
{ print "\nLatest Start Time :\n" } { print max };
}'
我想我想将其更改为“min = $0”和“max = $0”以获取包含最小值和最大值的整行。但这会打印出不同的行。
样本输出应该是:
1 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
14
15 Earliest Start Time :
16 dmq292 6908 6854 0 Jun04 pts /1 00:00:00 bash
17
18 Latest Start Time :
19 xle135 8983 8636 0 08:59 pts /15 00:00:00 ssh ctf . cs . utsarr . net
对我来说,最早开始时间为“Jun04”,最晚开始时间为“08:59”
【问题讨论】:
-
$5 > min然后min=$5似乎不适合获得最小值。您是否也只想将jun04与8:59进行比较。这两种格式完全不同。 -
如果你能展示一些示例输出,那就很容易了。
-
@duckyPluck,我在这里提出第二个 Mihir 问题,然后这些是 2 种不同的格式,您如何知道哪个是第一个,哪个是后面,请解释更多。
-
没错,它们是不同的格式。不过,它正在输出“Jun04”的最早日期。最新的开始时间是 08:59,这也与预期的输出同步。但是,它只是打印一个字段,而不是整行。
-
看起来
line7、line8和line9同时出现08:59。如何确定line7是最新的?