gpt4 book ai didi

linux - 如何从连续 yyyy-mm-dd 格式日期的报告中提取详细信息,直到在 unix 中找到下一个 yyyy-mm-dd 条目

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:37 24 4
gpt4 key购买 nike

我有一份报告(report.log),其中包含这样的条目

Following are access details for date: 2015-02-18
---------------------------------------------------

details1
details2
....
....

Following are access details for date: 2015-02-19
----------------------------------------------------

line1
line2
....
....

Following are access details for date: 2015-02-20
-------------------------------------------------------

line1
line2
....
....

我想编写一个脚本,要求以 yyyy-mm-dd 格式输入单个日期(其输出应为以下是日期的访问详细信息:yyyy-mm-dd 直至并排除“以下是日期的访问详细信息”的新输入行)或范围,例如从 2014-02-09 到 2014-02-20(其输出应为以下是日期的访问详细信息:2014-02- 09 到(包括 2014-02-20 范围内的第二个日期),这意味着输出日期范围内从第一个日期到最后一个日期的所有条目。

另请注意报告中的...行之后和之前的新行

最佳答案

这是一个使用d1=$(date -d "somedate"+%s) 将秒转换为纪元的快速示例。然后是第二天d2=$((d1 + 86400))。这允许您在文件中找到包含第一个日期的行并读取所有行,直到找到第二天。如果您有任何疑问,请告诉我:

#!/bin/sh

dt1=$(date -d "$1" +%s) # date provided by input
dt1f=$(date -d @$dt1 +%F) # date1 formatted in YYYY-MM-DD
dt2=$((dt1 + 86400)) # add one day to it
dt2f=$(date -d @$dt2 +%F) # date2 formatted in YYYY-MM-DD

ifn=${2:-loghdg.txt} # input file

# printf "\nDate Range: %s - %s\n\n" "$(date -d @$dt1 +%F)" "$(date -d @$dt2 +%F)"
printf "\nDate Range: %s - %s\n\n" "$dt1f" "$dt2f"

# read each line in file
while read -r line; do

arr=( $line ) # read line into array
for i in ${arr[@]}; do # for each word in line
[ $i == $dt1f ] && found=1 # if date1 found, print lines
[ $i == $dt2f ] && found=0 # if date2 found, stop printing
done

[ "$found" == "1" ] && printf " %s\n" "$line"

done <"$ifn"

输入文件

$ cat loghdg.txt
Following are access details for date: 2015-02-18
details1
details2
....
....
Following are access details for date: 2015-02-19
line1
line2
....
....
Following are access details for date: 2015-02-20
line1
line2
....
....

输出/使用

$ sh date-day-diff.sh 2015-02-18

Date Range: 2015-02-18 - 2015-02-19

Following are access details for date: 2015-02-18
details1
details2
....
....

接受开始结束日期的修改相当简单。

修改为接受开始+结束日期

dt1=$(date -d "$1" +%s)   # start date provided by input
dt1f=$(date -d @$dt1 +%F) # date1 formatted in YYYY-MM-DD
dt2=$(date -d "$2" +%s) # end date provided by input
dt2f=$(date -d @$dt2 +%F) # date2 formatted in YYYY-MM-DD

ifn=${3:-loghdg.txt} # input file

新输出

$ sh date-day-diff.sh 2015-02-18 2015-02-20

Date Range: 2015-02-18 - 2015-02-20

Following are access details for date: 2015-02-18
details1
details2
....
....
Following are access details for date: 2015-02-19
line1
line2
....
....

关于linux - 如何从连续 yyyy-mm-dd 格式日期的报告中提取详细信息,直到在 unix 中找到下一个 yyyy-mm-dd 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28872264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com