0

grep日付文字列の複数行のログファイルを すでに作成しました。

2012-10-09 14:05:26  
2012-10-09 14:11:18  
2012-10-09 14:12:03  


次に、それらをタイムスタンプに変換し、値の日付cmdよりも大きいものを見つけます。

date -d "2012-10-09 14:37:59" +%s  

複数の行、awk、またはその他のシェルcmdでそれを行う方法がわかりません。

4

2 に答える 2

2

これは単純な例にすぎません。より良い解決策には、パラメーターの受け渡し、エラー リターン テストなどを含める必要があります。

#!/bin/sh

SEARCH=`date -d "2012-10-09 14:11:09" +%s`
while read DATETIME ; do
    THIS=`date -d "$DATETIME" +%s`
    if [ "$SEARCH" -le "$THIS" ] ; then
        echo $DATETIME
    fi
done <<EOD
2012-10-09 14:05:26
2012-10-09 14:11:18
2012-10-09 14:12:03
EOD
于 2012-10-09T08:58:16.440 に答える
1

使用awk

awk -v d="2012-10-09 14:07:26" '
    BEGIN { 
        FS = "[-: ]"; 
        split( d, arr, /[-: ]/ );
        date_timestamp = mktime( arr[1] " " arr[2] " " arr[3] " " arr[4] " " arr[5] " " arr[6] );
        if ( date_timestamp == -1 ) {
            printf "%s\n", "Bad format for input date";
            exit 1;
        }
    }
    { 
        if ( mktime( $1 " " $2 " " $3 " " $4 " " $5 " " $6 ) > date_timestamp ) { 
            print $0; 
        } 
    }
' infile

それは以下をもたらします:

2012-10-09 14:11:18  
2012-10-09 14:12:03
于 2012-10-09T09:06:03.367 に答える