【发布时间】:2022-08-18 16:04:27
【问题描述】:
我有一个名为 samples.txt 的文件,其中包含 374371 行,它是这样创建的:
hexdump -e \'8/1 \"%02x \" \"\\n\"\' samples.bin > samples.txt
它看起来像这样(已弃用):
1a 03 1a 03 4a 03 57 03
4b 03 44 03 1e 03 09 04
10 03 19 03 40 03 ae 03
1e 03 26 03 33 03 ad 03
10 03 84 03 43 03 62 03
e0 03 16 03 34 03 c4 03
f8 02 3b 03 53 03 61 03
10 03 15 03 42 03 58 03
23 03 1f 03 57 03 62 03
17 03 73 03 31 03 33 03
14 03 ff 02 30 03 51 03
5f 03 42 03 47 03 7e 03
ba 03 26 03 35 03 a0 03
08 03 33 03 36 03 c8 03
0c 03 38 03 97 03 44 03
和以下 sed 命令:
echo \" ch0 ch1 ch2 ch3\"; cat -n samples.txt | sed \'s/\\s*\\([0-9]*\\)\\s*\\([0-9a-f]*\\) \\([0-9a-f]*\\) \\([0-9a-f]*\\) \\([0-9a-f]*\\) \\([0-9a-f]*\\) \\([0-9a-f]*\\) \\([0-9a-f]*\\) \\([0-9a-f]*\\)/Sample \\1:\\t0x\\2\\3 0x\\4\\5 0x\\6\\7 0x\\8\\9/\' | head -n 15
给我这样的输出:
ch0 ch1 ch2 ch3
Sample 1: 0x1a03 0x1a03 0x4a03 0x5703
Sample 2: 0x4b03 0x4403 0x1e03 0x0904
Sample 3: 0x1003 0x1903 0x4003 0xae03
Sample 4: 0x1e03 0x2603 0x3303 0xad03
Sample 5: 0x1003 0x8403 0x4303 0x6203
Sample 6: 0xe003 0x1603 0x3403 0xc403
Sample 7: 0xf802 0x3b03 0x5303 0x6103
Sample 8: 0x1003 0x1503 0x4203 0x5803
Sample 9: 0x2303 0x1f03 0x5703 0x6203
Sample 10: 0x1703 0x7303 0x3103 0x3303
Sample 11: 0x1403 0xff02 0x3003 0x5103
Sample 12: 0x5f03 0x4203 0x4703 0x7e03
Sample 13: 0xba03 0x2603 0x3503 0xa003
Sample 14: 0x0803 0x3303 0x3603 0xc803
Sample 15: 0x0c03 0x3803 0x9703 0x4403
在我看来,将 hexdump 的输出重定向到一个临时的 samples.txt 文件效率低下,因为对于一个,你必须在最后删除它,对于两个,也许对内存中的数据使用 sed 比它更快在磁盘上。如何跳过 samples.txt 文件并获得相同的结果?
-
我有一个模糊的想法,为什么你不能使用直接管道,但为了让你的问题更清楚,你可能需要明确解释。我的意思是,我假设您确实尝试过并且不喜欢结果。也许讨论您尝试的结果与您想要的结果的差异。
-
嗨@Yunnosch,我修改了我原来的问题。