我有一个文件,我必须提取一些数据,然后计算每小时报告。下面是我必须使用的示例输入字段,并以csv格式获取最终报告计数。提取细节已经完成,但小时报告使其变得复杂。你能帮助我吗?
MO,0,20170608230457826
MT,0,20170608220423442
MO,408,20170608223453234
MO,0,20170608224345342
MT,2,20170608227654342
以下格式需要输出:
MO 0 - 1 - 08/06/2017 23:00
MO 0 - 1 - 08/06/2017 22:00
MT 0 - 1 - 08/06/2017 22:00
MO 408 - 1 - 08/06/2017 22:00
MT 2 - 1 - 08/06/2017 22:00
到目前为止我准备的剧本。
Shell脚本
da=`date -d "-1 day" +%Y%m%d`
for i in VOLTE*
do
for j in MO MT CF
do
cat $i | grep $j | awk -F"," '{print $2","$11","$20}' >> $j.tmp
for n in 0 2 408 480 -1001 500
do
cat $j.tmp | awk -v num="$n" -F"," '{if( $3 == num ) print $0}' >> "$j"_"$n".tmp
done
done
done
答案 0 :(得分:0)
gawk 解决方案:
awk -F, '{ match($3, /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})/, a);
printf("%s %s - 1 - %02d/%02d/%4d %2d:00\n",$1,$2,a[3],a[2],a[1],a[4]) }' file
输出:
MO 0 - 1 - 08/06/2017 23:00
MT 0 - 1 - 08/06/2017 22:00
MO 408 - 1 - 08/06/2017 22:00
MO 0 - 1 - 08/06/2017 22:00
MT 2 - 1 - 08/06/2017 22:00
match($3, /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})/, a)
- 匹配第3个字段中所需的 datetime 部分。数组a
将填充每个捕获的组的值,以便a[1]
包含值([0-9]{4})