awk - AWK 搜索特定序列,如果找到则在下一行搜索另一个序列 version2
问题描述
我试图找到一个 txt 格式的字符串,每次找到它时,然后寻找一个特定的字符串来更改另一个字符串,并避免读取该行的第一个序列。
想象一下 nexts 十六进制 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
推荐阅读
- oracle - 调用程序
- python-3.x - Pandas read_html 遗漏了几行的表格
- python - Pyspark - 基于数据框中的 2 列的不同记录
- powershell - 您可以在 ps shell 窗口或仅脚本中使用 powershell 'here string' 吗?
- php - 其他格式的数组
- javascript - 无法更新 AngularJS 输入值
- html - 如何在 HTML5 中正确使用图像 srcset
- inputstream - 从 InputStream 开始,使用 PDFBox 将文本图像添加到 PDF 并以原始 InputStream 变量结束
- python - 我可以使用 .py 文件而不是 .yml 创建 Conda 环境吗?
- llvm - GEP 分段错误 LLVM C++ API