gpt4 book ai didi

linux - 使用 awk 提取文件的所需部分时出现混淆

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:10 31 4
gpt4 key购买 nike

我有一个使用 awk、sed、grep 和其他 shell 功能的脚本。

我被困在一个地方所以需要你的帮助......

这是 input归档我的问题

udit@udit-Dabba ~/ah $ cat decrypt.txt
60 00 00 00 00 17 3a 20 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 02 *00 00 e0 f9 6a 61 61 6e
65 6b 61 68 61 6e 67 61 79 65 77 6f 64 69 6e* 00
00 00 03 29

我的目的是提取00 00 e0 f9 6a 61 61 6e
65 6b 61 68 61 6e 67 61 79 65 77 6f 64 69 6e
从上面提到的文件, 也标在 * 之间上面的

虽然很明显但是这些*显示的是为了清除这里的情况,它们实际上并不存在于文件中。

如上所示文件的最后五个单元是..

00 00 00 03 29

这些 00是简单的填充字节和 03指定它们的焊盘长度

现在这里是提取所需部分的脚本部分:

size=`wc -w decrypt.txt`
padlen=3 // calculated by some other mechanism


awk -v size=$size -v padlen=$padlen 'BEGIN {RS=" ";ORS=" ";} {if (NR > 40
&& NR <=size-padlen-2) print $0}' decrypt.txt | sed '1,1s/ //'

输出:

00 00 e0 f9 6a 61 61 6e
65 6b 61 68 61 6e 67 61 79 65 77 6f 64 69

我的问题:最后一个单元 6e失踪

也尝试通过终端...

size=68,padlen=3所以循环应该从NR=40 to NR<=63开始

udit@udit-Dabba ~/ah $  awk 'BEGIN {RS=" ";ORS=" ";} {if (NR > 40 && NR <= 65)
print $0}' decrypt.txt | sed '1,1s/ //'

00 00 e0 f9 6a 61 61 6e
65 6b 61 68 61 6e 67 61 79 65 77 6f 64 69 6e 00
00

如果循环上升到 65,工作正常.So 也应该工作到 63

udit@udit-Dabba ~/ah $  awk 'BEGIN {RS=" ";ORS=" ";} {if (NR > 40 && NR <= 64)
print $0}' decrypt.txt | sed '1,1s/ //'

00 00 e0 f9 6a 61 61 6e
65 6b 61 68 61 6e 67 61 79 65 77 6f 64 69 6e

但是这是什么????当我减少 6564 , 有两个损失 00单位。为什么会这样???

也试过这个但找不到这个奇怪输出的原因。

udit@udit-Dabba ~/ah $  awk 'BEGIN {RS="[ \n]";ORS=" ";} {if (NR > 40
&& NR <=65)print $0}' decrypt.txt | sed '1,1s/ //'

0002 00 00 e0 f9 6a 61 61 6e 65 6b 61 68 61 6e 67 61 79 65 77 6f 64

请帮帮我...

可能是我对问题的解释超出了要求,但确实需要它。

我是所有这些 shell 和 awk 的新手,所以可能有一个我找不到的愚蠢错误。

请帮我解决这个问题..

提前致谢..

编辑:

60 00 00 00 00 17 3a 20  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 02

这些是固定的 40 个单位的 ipv6 header ,将始终保持不变。

* 之间的部分是可变长度的,这就是为什么我需要以这种方式工作,否则这将是一项简单的任务。

最佳答案

_padlen=3 _length=23

awk '{
for (i = NF - l - p - 2; i < NF - p - 2; i++)
printf "%s", ($i (i < NF - p - 2 - 1 ? OFS : ORS))
}' l="$_length" p="$_padlen" RS= ORS='\n' decrypt.txt

关于linux - 使用 awk 提取文件的所需部分时出现混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7974769/

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