大容量ファイルがありますが、日付と時刻を使用して検索する必要があります。ファイルの各行には日付と時刻があります。
複数の行を検索して、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
唯一の実際の問題は、$AAA
andの$BBB
代わりにAAA
andに割り当てることです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
。
答え2
答え3
awk
最高のツールではありません。
sed -e "/^$AAA/,/^$BBB/,p" file.txt
そしてman sed
。