在一定时间范围内使用bash搜索所有记录

在一定时间范围内使用bash搜索所有记录,bash,csv,search,awk,time,Bash,Csv,Search,Awk,Time,我有一个csv文件,其中包含以下数据: 67940,"Alpha",ISS3425345,12/9/2014 21:12, 69542,"Beta",ISS03425324,1/16/2015 11:56, 69761,"Gamma",ISS02345,1/22/2015 12:54, 以逗号作为分隔符。第4个字段是记录创建的时间戳。我需要编写一个脚本作为参数输入时间范围的开始和结束,以搜索此时间范围内的所有记录 我目前的进展: #!/bin/bash SearchStart=$1 Sea

我有一个csv文件,其中包含以下数据:

67940,"Alpha",ISS3425345,12/9/2014 21:12,
69542,"Beta",ISS03425324,1/16/2015 11:56,
69761,"Gamma",ISS02345,1/22/2015 12:54,
以逗号作为分隔符。第4个字段是记录创建的时间戳。我需要编写一个脚本作为参数输入时间范围的开始和结束,以搜索此时间范围内的所有记录

我目前的进展:

#!/bin/bash


SearchStart=$1
SearchEnd=$2

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ ! -f "$DIR/Output_data.csv" ]; then 
touch $DIR/Output_data.csv 
fi

while IFS= read -r current_escalation; do
Timestamp=$( echo $current_escalation | cut -d',' -f4 )


(Here is some script to search records from SearchStart to SearchEnd)

done <$DIR/input_data.csv
#/bin/bash
SearchStart=$1
SearchEnd=$2
DIR=“$(cd“$(dirname“${BASH_SOURCE[0]}”)”&&pwd)
如果[!-f“$DIR/Output_data.csv”];然后
触摸$DIR/Output_data.csv
fi
而IFS=读取-r当前_升级;做
时间戳=$(回显$current|U escalation | cut-d','-f4)
(以下是从SearchStart到SearchEnd搜索记录的一些脚本)

使用GNU awk完成

一行

awk -F, -vstartd="12/9/2014 22:00:00" -vendd="1/22/2015 10:00:00" 'function df(dt, d){split(dt,d,/[/: ]/); return mktime(d[3]" "d[1]" "d[2]" "d[4]" "d[5]" "0)}{s=df($4)} s >=df(startd) && s<=df(endd)' file
输出

$ cat f
67940,"Alpha",ISS3425345,12/9/2014 21:12,
69542,"Beta",ISS03425324,1/16/2015 11:56,
69761,"Gamma",ISS02345,1/22/2015 12:54,
$ awk -F, -vstartd="12/9/2014 22:00:00" -vendd="1/22/2015 10:00:00" 'function df(dt, d){split(dt,d,/[/: ]/); return mktime(d[3]" "d[1]" "d[2]" "d[4]" "d[5]" "0)}{s=df($4)} s >=df(startd) && s<=df(endd)' f
69542,"Beta",ISS03425324,1/16/2015 11:56,

$awk-F,-vstartd=“12/9/2014 22:00:00”-vendd=“1/22/2015 10:00:00”函数df(dt,d){split(dt,d,/[/:]/);return mktime(d[3]”“d[1]”“d[2]”“d[4]”“d[5]”“0}{s=df($4)}s>=df(startd)和&s
bash
不是用于此的工具,使用
awk
或尝试下载并使用note,当IFS=,read-r col1 col2 col3 col4时,您可以通过说
直接获得
$Timestamp
;这将在
$col1
中存储第一个字段,在
$col2
中存储第二个字段,依此类推。@伊尼安,你能提供一些关于awk的代码示例吗?@VasiliyVegas:这里有很多类似的答案,尝试一下,然后在这里发布你的努力。太棒了!谢谢你的帮助!另一个问题-能否重写awk字符串,将所有输出放入某个文件或变量中?因为我不太明白如何在awk中实现这一点。你只需要在最后像这样重定向o/p InputFiFile>OutputFile谢谢!这也有帮助!
$ awk -F, -vstartd="12/9/2014 22:00:00" -vendd="1/22/2015 10:00:00" 'function df(dt, d){split(dt,d,/[/: ]/); return mktime(d[3]" "d[1]" "d[2]" "d[4]" "d[5]" "0)}{s=df($4)} s >=df(startd) && s<=df(endd)' f
69542,"Beta",ISS03425324,1/16/2015 11:56,