ファイルから2つのタイムスタンプ間の行を取得する

ファイルから2つのタイムスタンプ間の行を取得する

大容量ファイルがありますが、日付と時刻を使用して検索する必要があります。ファイルの各行には日付と時刻があります。

複数の行を検索して、2つの特定の日付と時刻の間にある行を取得する必要があります。

サンプルファイル(日付と時刻フィールド$ 2と$ 3):

SERVER 2015-12-12 05:00:20 some_text_here something  
SERVER 2015-11-02 12:22:40 some_text_here something
SERVER 2015-12-11 20:00:00 some_text_here something
SERVER 2015-12-11 23:00:00 some_text_here something
SERVER 2015-12-12 00:30:00 some_text_here something
SERVER 2015-12-12 00:59:00 some_text_here something
SERVER 2015-09-20 03:28:11 some_text_here something
SERVER 2015-04-16 04:49:59 some_text_here something

私が試したコマンド(ユーザーはスクリプトを実行するときに4つのパラメータを提供する必要があります):

AAA="$1 $2"
BBB="$3 $4"

awk '$2" "$3>="'"$AAA"'" && $2" "$3<="'"$BBB"'"' file.txt > newfile.txt

上記の行をスクリプトとして使用していますが、動作しません。

newfile.txt以下を含める必要があります(パラメータを含む2015-12-11 20:00:00 2015-12-12 01:00:00):

SERVER 2015-12-11 20:00:00 some_text_here something
SERVER 2015-12-11 23:00:00 some_text_here something
SERVER 2015-12-12 00:30:00 some_text_here something
SERVER 2015-12-12 00:59:00 some_text_here something

ベストアンサー1

唯一の実際の問題は、$AAAandの$BBB代わりにAAAandに割り当てることですBBB。したがって、これを行うと(コードとほぼ同じ):

AAA="2015-12-11 20:00:00"
BBB="2015-12-12 01:00:00"
awk '$2" "$3>="'"$AAA"'" && $2" "$3<="'"$BBB"'"' file.txt > newfile.txt

すでに働いているはずです。ただし、潜在的な引用の問題を減らすために、次のような追加の変更をお勧めします(特にこの方法を他の場所で再利用する場合、またはに特殊文字を入力する場合AAABBB

AAA="2015-12-11 20:00:00"
BBB="2015-12-12 01:00:00"
awk -v string1="$AAA" -v string2="$BBB" '$2" "$3>=string1 && $2" "$3<=string2' file.txt > newfile.txt

-vこれについてはマニュアルページで読むことができますawk

おすすめ記事