【发布时间】:2018-09-22 05:16:43
【问题描述】:
我有一个包含超过 10K 行记录的文件。 在每一行中,有两个日期+时间信息。下面是一个例子: “aaa bbb ccc 170915 200801 12;ddd e f;g;hh;171020 122030 10;ii jj kk;” 我想过滤掉这两个日期之间的天数少于 30 天的行。 以下是我的源代码:
#!/bin/bash
filename="$1"
echo $filename
touch filterfile
totalline=`wc -l $filename | awk '{print $1}'`
i=0
j=0
echo $totalline lines
while read -r line
do
i=$[i+1]
if [ $i -gt $[j+9] ]; then
j=$i
echo $i
fi
shortline=`echo $line | sed 's/.*\([0-9]\{6\}\)[ ][0-9]\{6\}.*\([0-9]\{6\}\)[ ][0-9]\{6\}.*/\1 \2/'`
date1=`echo $shortline | awk '{print $1}'`
date2=`echo $shortline | awk '{print $2}'`
if [ $date1 -gt 700000 ]
then
continue
fi
d1=`date -d $date1 +%s`
d2=`date -d $date2 +%s`
diffday=$[(d2-d1)/(24*3600)]
#diffdays=`date -d $date2 +%s` - `date -d $date1 +%s`)/(24*3600)
if [ $diffday -lt 30 ]
then
echo $line >> filterfile
fi
done < "$filename"
我在 cywin 中运行它。处理 10 行大约需要 10 秒。我使用 echo $i 来显示进度。
是因为我在脚本中使用了错误的方式吗?
【问题讨论】:
-
time返回 sys.时间? (即实际开销)