日付と時刻を使用して処理する必要があるこの大きなファイルがあります。このファイルのすべての行には、日付と時刻が含まれています。
行を検索して、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
唯一の実際の問題は、AAA
とBBB
ではなく$AAA
と$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
すでに動作するはずです。ただし、潜在的な引用の問題を減らすために、次の変更を行うことをお勧めします(特に、このアプローチを別の場所で再利用したり、AAA
またはBBB
に特別な文字を入れたりした場合)。
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
のmanページで読むことができます。