gpt4 book ai didi

AWK 搜索特定序列,如果找到则在下一行搜索另一个序列 version2

转载 作者:行者123 更新时间:2023-12-04 01:06:36 27 4
gpt4 key购买 nike

我试图找到一个 txt 格式的字符串,每次找到它然后寻找一个特定的字符串以更改为另一个字符串并避免读取该行的第一个序列。

想象下一个十六进制的 txt:

0000  09 06 07 04 00 00 01 00 1d 03 78 2c a1 2a 02 01   
0010 b7 09 01 47 30 22 a0 0a 4b 08 33 04 03 92 22 14
0020 17 f0 a1 0b 80 00 81 00 84 01 00 86 00 85 00 83
0030 07 91 94 71 06 00 07 19

0000 09 06 07 04 00 00 01 00 2b 03 4b 27 a1 25 02 01
0010 00 09 01 66 30 4b a0 0a 80 08 33 04 03 92 22 14
0020 17 f0 a1 06 82 00 84 00 85 00 82 07 91 94 71 06
0030 00 07 19

预期输出:

0000  09 06 07 04 00 00 01 00 1d 03 78 2c a1 2a 02 01   
0010 b7 09 01 47 30 22 a0 0a 4b 08 33 04 03 92 22 25
0020 17 f0 a1 0b 80 00 81 00 84 01 00 86 00 85 00 83
0030 07 91 94 71 06 00 07 19

0000 09 06 07 04 00 00 01 00 2b 03 4b 27 a1 25 02 01
0010 00 09 01 66 30 4b a0 0a 80 08 33 04 03 92 22 25
0020 17 f0 a1 06 82 00 84 00 85 00 82 07 91 94 71 06
0030 00 07 19

我每次遇到 4b 序列时都需要查找 14 序列,如果找到,请在下一行查找第一个字符串,在本例中为 17,如果该字符串为 17,则将 14 更改为 25 。你在左边的是一个序列,它给出了你所在的 txt 行,因此分析起来并不有趣,因为它在每个段落中重复出现

我有的是下一个:

gawk  ' { for ( i = 1; i <= NF; ++i ) {

if ( $i == "4b" )
r = 1
if ( r && ($i == "14" ))
t = 1

}
}
1 ' example.txt example2.txt

我不太清楚如何跳到开始阅读下一行

总结:

想法是搜索 4b,如果遇到它,则开始在同一行中寻找 14,它必须在该行的最后一个位置。 如果在下一行的第二个字段中出现 17 则将 14 更改为 25

我的是这样的:

gawk -i inplace  ' { for ( i = 1; i <= NF; ++i ) {

if ($i == "4b" )
r = 1
if (r && $i == "14" )
z = 1
$i = x
if ( z && r && $i == "17")
z = 0
r = 0
x = "25"


}
}
1 ' example.txt example2.txt

主要问题是不知道如何验证14是不是下一行的第二个字段

最佳答案

使用 gnu-awk,你可以试试这个:

awk -v RS= '{ORS=RT} {$0 = gensub(/(\s4b\s(.+\s)?)14([[:blank:]]*\n\S+[[:blank:]]+17\s)/, "\\125\\3", 1)} 1' file

0000 09 06 07 04 00 00 01 00 1d 03 4b 2c a1 2a 02 01
0010 b7 09 01 47 30 22 a0 0a 80 08 33 04 03 92 22 25
0020 17 f0 a1 0b 80 00 81 00 84 01 00 86 00 85 00 83
0030 07 91 94 71 06 00 07 19

0000 09 06 07 04 00 00 01 00 2b 03 4b 27 a1 25 02 01
0010 00 09 01 66 30 1d a0 0a 80 08 33 04 03 92 22 25
0020 17 f0 a1 06 82 00 84 00 85 00 82 07 91 94 71 06
0030 00 07 19

RegEx Demo

关于AWK 搜索特定序列,如果找到则在下一行搜索另一个序列 version2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66247263/

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