【发布时间】:2018-03-24 07:26:39
【问题描述】:
日志文件 abc.log
PID:6543 ……
…………………
PID:4325 ……
……………………
PID:6543 ……
日志文件 xyz.log
PID:8888 ……
…………………
PID:9992 ……
……………………
PID:6543 ……
注意:PID 编号可以在文件中重复。而且一个PID号可以出现在多个日志文件中。
这个问题在今天的一次采访中被问到,我必须返回带有每个 PID 号的输出以及今天记录的每个 PID 号的计数。 这是我写的脚本。你能确认这是否可行。面试官没有说我的答案是否正确。有人可以为我审查这个。他们希望我用 PID:5674 10 之类的制表符空间打印每个唯一的 PID:number 及其计数
——如果今天和前一天的日志文件在同一个文件夹中
#!/bin/ksh
cd /A/B/
for a in `ls -lrt | grep "Mar 24" | awk '{print $9}'`; — list of files generated today
do
grep "^PID:" $a | cut -d " " f1 >> /tmp/abc.log — saving first column which look like PID:23456
done
for b in `cat /tmp/abc.log | sort -u`;
do
x=grep $b /tmp/abc.log | grep -v grep | wc;
echo $b" "$x — will print like PID:23456 56(count)
done
#!/bin/ksh
— If today’s log files are in different folder
cd /A/B/
for a in `ls /A/B/*.log`
do
grep "^PID:" $a | cut -d " " f1 >> /tmp/abc.log
done
for b in `cat /tmp/abc.log | sort -u`;
do
x=grep $b /tmp/abc.log | grep -v grep | wc;
echo $b" "$x
done
【问题讨论】:
-
请将该示例输入的所需输出添加到您的问题中。
-
他们希望我打印每个唯一的 PID:number 及其计数,例如 .. PID:5674 10
-
你的脚本中有大量的 UTF-8 大引号应该是 ASCII 双引号
"。事实上,任何人都无法轻松测试这些脚本。 -
现已更正。看起来他们在从文本文件粘贴到网页时转换为 UTF-8。
-
您可以尝试类似
grep -Eo "PID:[0-9]*" | sort | uniq -c并使用sed将格式更改为所需的格式。应避免在循环内(对于每一行)使用grep。
标签: shell sorting unix grep ksh