gpt4 book ai didi

bash - 如何在每一行前添加一个用 awk 找到的模式实例

转载 作者:行者123 更新时间:2023-12-02 15:56:09 25 4
gpt4 key购买 nike

我有一个包含很多行的文件。有些行显示日期和时间,例如2022-03-16-08:00

我希望找到的模式之后的所有行都在前面加上该模式

此外,因为有很多行具有不同的时间,所以我希望它针对模式的每个实例进行更改,并在该实例的以下行前面加上相应的日期和时间。

例如,我有以下文件(example.txt):

Date1: 2022-03-16-08:00
Something happened
Something else happened
Date2: 2022-03-16-08:10
Something happened
Something else happened
Something else happened

我想要的结果是:

Date1: 2022-03-16-08:00
2022-03-16-08:00 Something happened
2022-03-16-08:00 Something else happened
Date2: 2022-03-16-08:10
2022-03-16-08:10 Something happened
2022-03-16-08:10 Something else happened
2022-03-16-08:10 Something else happened

我尝试使用 sed 将找到的模式添加到每一行之前,但 sed 变量似乎不起作用:

sed -e '/2022-/s/\(.*\)/\1/' -e 's/^/$1/' example.txt

结果:

$1Date1: 2022-03-16-08:00
$1Something happened
$1Something else happened
$1Date2: 2022-03-16-08:10
$1Something happened
$1Something else happened
$1Something else happened

我认为使用 awk 可能是可行的,使用 awk -F: '/2022/{var=$2}'然后将它添加到下一行,但我不知道如何将它更改为 Date 的新实例

我们非常感谢并欢迎任何帮助。

最佳答案

我将 GNU AWK 按照以下方式完成此任务,让 file.txt 内容为

Date1: 2022-03-16-08:00
Something happened
Something else happened
Date2: 2022-03-16-08:10
Something happened
Something else happened
Something else happened

然后

awk 'BEGIN{FPAT="[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{2}:[0-9]{2}"}NF{when=$1;print}!NF{print when,$0}' file.txt

输出

Date1: 2022-03-16-08:00
2022-03-16-08:00 Something happened
2022-03-16-08:00 Something else happened
Date2: 2022-03-16-08:10
2022-03-16-08:10 Something happened
2022-03-16-08:10 Something else happened
2022-03-16-08:10 Something else happened

说明:在 BEGIN 中,我使用 FPAT(字段模式)通知 GNU AWK 它应该将字段视为以下字符串:4 位数字后跟 - 后跟 2 位数字后跟 - 后跟 2 位数字后跟 - 后跟 2 位数字后跟 : 后跟 2 位数字,即符合您正在使用的格式的时间戳。对于每一行,如果它确实包含这样的文件(即 NF 的字段数不为零),请为第一个此类字段的内容设置 when 变量值($1) 并按原样打印当前行,如果没有这样的字段(!NFNF 的否定) ) 然后打印 when 变量值后跟整个当前行 ($0)。

警告:我的代码假设如果你在单行中有多个时间戳,你想使用第一个并且第一行总是有时间戳

(在 gawk 4.2.1 中测试)

关于bash - 如何在每一行前添加一个用 awk 找到的模式实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71495749/

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