Files
從文件中獲取兩個時間戳之間的行
我有這個大文件,我需要使用日期和時間來處理。該文件中的每一行都有一個日期和時間。
我需要搜尋這些行並獲取位於兩個特定日期和時間之間的行。
範例文件(日期和時間欄位是 $ 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
唯一真正的問題是您分配給
$AAA
and$BBB
而不是AAA
andBBB
。因此,如果您這樣做(幾乎與您的程式碼相同):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 中放置特殊字元
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
.