我有一个如下的输入文件;
975700 18:32:32.956
975700 18:32:32.971
975700 18:32:33.018
975701 18:32:32.987
975702 18:32:32.987
975702 18:32:33.003
975702 18:32:33.034
我想采用相同身份证号码的时差,到目前为止我能够提出以下代码;
while read jobnum time
do
if [[ "$prevjobnum" != "$jobnum" ]] && [[ `grep $jobnum $joblst|wc -l` -eq 1 ]]
then
echo "$jobnum incomplete log"
elif [[ "$prevjobnum" == "$jobnum" ]]
then
ENDTIME=`date +%s.%N -d "$time"`
STARTTIME=`date +%s.%N -d "$prevtime"`
DIFF=$(echo $ENDTIME - $STARTTIME | bc | sed 's/0\{1,\}$//')
echo "$jobnum clip time is $DIFF seconds"
else
:
fi
但是它仅适用于ID的一个和两个实例。我还想让它工作,以便它可以为ID的第一个和最后一个实例做差异,如果它超过两个,如下所示;
975700 18:32:32.956
975700 18:32:32.971
975700 18:32:33.018
想获得如下的输出;
975700 clip time is .062 seconds
975701 incomplete log
975702 clip time is .047 seconds
答案 0 :(得分:1)
以下脚本可能是一个很好的起点:
#!/bin/bash
while read jobnum time
do
# first line
if [[ -z $prevjobnum ]]; then
prevjobnum=$jobnum
starttime=$time
lasttime=$time
continue
fi
if [[ $prevjobnum == $jobnum ]]; then
lasttime=$time
else
if [[ $starttime == $lasttime ]]; then
echo "$prevjobnum incomplete log"
else
echo "$prevjobnum $starttime $lasttime"
:
fi
prevjobnum=$jobnum
starttime=$time
lasttime=$time
fi
done
if [[ $starttime == $lasttime ]]; then
echo "$prevjobnum incomplete log"
else
echo "$prevjobnum $starttime $lasttime"
fi
<强>输出强>
975700 18:32:32.956 18:32:33.018
975701 incomplete log
975702 18:32:32.987 18:32:33.034