我有一个大文件,我需要使用日期和时间来浏览它。该文件中的每一行都有日期和时间。
我需要搜索各行并获取位于两个特定日期和时间之间的行。
示例文件(日期和时间字段为 $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
or 中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
。