【发布时间】:2019-07-26 12:14:39
【问题描述】:
我一直在提供一个输入文件,它看起来像这样:
ID 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
HanSolo 9150 9139 0 08:59 pts/16 00:00:00 ps -af
它需要像这样结束:
User: adz110
bash
who
User: dmq292
bash
assign1.sh if of
User: erg474
ls
User: xle135
bash
ssh ctf.cs.utsarr.net
User: zeh458
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
到目前为止,我在一个我写下的 file.awk 中找到了:
/[a-z]{3}[0-9]{3}/
{
print $1
if( match($1 , arg1) )
{
for(i=8; i <= NF ; i ++)
printf("%s", $i);
printf("\n");
}
}
END {
print " Earliest Start Time:"
print "Latest Start Time: "
}
因此,它不是为每个用户名与 [a-z][0-9]{3} 匹配的用户打印,而是打印 cmd 以及不带任何空格的用户名。我在理解关联数组和使用特殊变量(如 NR、RS 等)时遇到了很多麻烦。
【问题讨论】:
-
pts后面真的是空格吗? -
这里没有关联数组。它正在精确地打印您要求它打印的内容。
-
所以我可以通过执行“if (a[$1]++)”来取消用户是否重复的逻辑部分,那么这算作关联数组吗?因为我还需要考虑最早开始时间和最晚开始时间的线路对吗? @Cyrus 我修复了那些错误添加的多余空格
-
为什么
vim prog.c中有两个空格? -
如果用户
zbc123正在运行 3 个bash实例,bash应该在该用户的输出中出现 3 次还是只出现一次?
标签: sorting awk associative-array program-files