Linux获取最小/最大日期列

时间:2014-07-07 08:43:09

标签: linux date max min

我有一个非常大的文件(7G),我想从中提取特定日期列的最小值和最大值(它是文件中的第4列)。 目前,我有这个片段,但我不确定它的效率和环境。我正在努力对重处理敏感,所以如果有人能想出一些不具备性能的东西,我会很感激

MIN=`date --date="$1" +%s`
MAX=`date --date="$2" +%s`

while true ; do
read LINE
if [ "$LINE" = "" ] ; then break ; fi

L_DATE=`echo $LINE | awk '{print $1 " " $2 " " $3 " " $4}'`
L_DATE=`date --date="$L_DATE" +%s`

if (( $MIN > $L_DATE  )) ; then continue ; fi
if (( $L_DATE <= $MAX )) ; then echo $LINE ; fi
if (( $L_DATE >  $MAX )) ; then break ; fi

完成

2 个答案:

答案 0 :(得分:3)

为此,我经常使用以下解决方案:

sed 1d textfile | awk '{ if($4 > MAX) { MAX=$4} if(($4 < MIN) || MIN =="") {MIN = $4}} END{print MIN"|"MAX }' FS=";"

sed 1d将删除标题(如果它不适用于您的情况,则删除该部分)。 同时更改FS(字段分隔符)。

答案 1 :(得分:0)

您正在为文件的每一行运行新进程(awk,date和bash)。我认为效率很差。

我建议使用一些更先进的编程语言来完成这样的任务而不是bash。

否则,如果你坚持使用bash,你可以尝试不使用awk和日期。你的线路格式是什么?我认为你可以比较日期而不转换它们,你可以用一些变量操作替换awk命令,如$ {L_DATE //...}

否则你可以尝试使用awk来解析整个文件...