Unix ksh - 打印 PID 编号和重复计数



日志文件 abc.log

PID:6543 ……    
…………………
PID:4325 ……
……………………
PID:6543 ……    

日志文件 xyz.log

PID:8888 ……
…………………
PID:9992 ……
……………………
PID:6543 ……

注意:PID 编号可以在文件中重复。而且一个PID编号可以出现在多个日志文件中。

这个问题在今天的一次采访中被问到,我必须返回每个 PID 编号的输出以及今天记录的每个 PID 编号的计数。这是我写的剧本。你能确认这是否有效吗?面试官没有说我的回答是否正确。有人可以为我审查一下吗?他们希望我打印每个唯一的 PID:编号及其计数,带有制表符空格,如 PID:5674 10

— 如果今天和前一天的日志文件位于同一文件夹中

#!/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 

你可以使用awk

grep -h 'PID:' *.log > all_pids.log  
#put only PID lines to a file.This can also be done 
#with pattern in awk and multiple files. I'm just separating it for clarity
awk  '
  { a[$1]++ }     #increments by 1 for corresponding PID
  END {
    for (i in a) {
      printf "%s %sn", i, a[i];   
    }
  }
'  all_pids.log

最新更新