gpt4 book ai didi

Bash 脚本在特定范围内剪切

转载 作者:行者123 更新时间:2023-11-29 09:46:16 28 4
gpt4 key购买 nike

我有一个包含大量收集日志的日志文件,我已经使用正则表达式创建了一个 grep 命令,输出与其匹配的行数。这是我用来输出匹配行的 grep 命令:

grep -n -E 'START_REGEX|END_REGEX' Example.log | cut -d ':' -f 1 > ranges.txt

正则表达式是有条件的,它可以匹配特定日志的开头或其结尾,因此输出类似于:

12
45
128
136
...

想法是使用它作为范围的来源,从第一个数字到第二个数字对日志文件进行特定切割,并将它们保存在另一个文件中。
范围由一对输出组成,根据示例,第一个范围是 12,45,第二个范围是 128,136
我希望在最终文件中看到从 12 到 45 行以及从 128 到 136 行的所有文本。我面临的问题是 sed 命令似乎一次只能处理一个范围。

sed -E -iTMP "$START_RANGE,$END_RANGE! d;$END_RANGEq" $FILE_NAME

有没有什么办法(也许是 awk)在一个“周期”中做到这一点?约束条件:我只能使用支持的 bash 命令。

最佳答案

你也可以使用 awk 语句

awk '(NR>=12 && NR<=45) || (NR>=128 && NR<=136)' file

其中,NRAwk 中的一个特殊变量,它在处理文件时跟踪行号。

一个例子,

seq 1 10 > file
cat file
1
2
3
4
5
6
7
8
9
10
awk '(NR>=1 && NR<=3) || (NR>=8 && NR<=10)' file
1
2
3
8
9
10

您还可以避免使用 -v 变量选项对行号进行硬编码,

awk -v start1=1 -v end1=3 -v start2=8 -v end2=10 '(NR>=start1 && NR<=end1) || (NR>=start2 && NR<=end2)' file
1
2
3
8
9
10

关于Bash 脚本在特定范围内剪切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41672515/

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