Files

從文件中獲取兩個時間戳之間的行

  • April 13, 2016

我有這個大文件,我需要使用日期和時間來處理。該文件中的每一行都有一個日期和時間。

我需要搜尋這些行並獲取位於兩個特定日期和時間之間的行。

範例文件(日期和時間欄位是 $ 2 and $ 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

也許您需要一個可以輸入兩個特定日期和時間的腳本。 在此處輸入圖像描述

程式碼:

#!/bin/bash
if [ $# -ne 4 ];then
exit 0
fi
AAA=$1" "$2
BBB=$3" "$4
awk -v begintime="${AAA}" -v endtime="${BBB}" '$2" "$3>=begintime && $2" "$3<=endtime' exa > newfile.txt

唯一真正的問題是您分配給$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

它應該已經工作了。但我建議進行以下進一步更改以減少潛在的引用問題(特別是如果您碰巧在其他地方重用此方法或在 or 中放置特殊字元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

您可以-vawk.

引用自:https://unix.stackexchange.com/questions/276078