use*_*890 12 utilities text-processing
具有文件的字节偏移量。
是否有提供此字节行号的工具?
示例,文件:
001
002
003 <<-- first zero on this line is byte 8
004
Run Code Online (Sandbox Code Playgroud)
有字节偏移8
会给我行3
。
猜猜我可以使用这样的东西来查找行号:
一种。tail -c+(offset + 1) file | wc -l
,这里+1
为tail
从1计数
湾 wc -l file
C。那么tail -n+num
这里num
是a - b + 1
但是......有没有一个相当常见的工具可以num
直接给我?
编辑,错误:或更明显:
head -c+offset file | wc -l
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 16
在你的例子中,
001
002
003
004
Run Code Online (Sandbox Code Playgroud)
字节数 8 是第二个换行符,而不是0
下一行。
以下将为您提供$b
字节后的完整行数:
$ dd if=data.in bs=1 count="$b" | wc -l
Run Code Online (Sandbox Code Playgroud)
将报告2
与b
设为8,将报告1
与b
设置为7。
该dd
实用程序在这里使用的方式将从文件中data.in
读取,并将读取$b
大小为 1 字节的块。
正如“icarus”在下面的评论中正确指出的那样,使用bs=1
效率低下。在这种特殊情况下,交换bs
和更有效count
:
$ dd if=data.in bs="$b" count=1 | wc -l
Run Code Online (Sandbox Code Playgroud)
这将与第一个dd
命令具有相同的效果,但只会读取一个$b
字节块。
该wc
实用程序计算换行符,Unix 中的“行”总是以换行符结尾。所以上面的命令仍然会说2
你是否设置b
为低于 12 的任何值(以下换行符)。因此,您要查找的结果是上述管道报告的任何数字加上 1。
这显然也会计算文件的二进制 blob 部分中位于 ASCII 文本之前的随机换行符。如果您知道 ASCII 位从哪里开始,您可以添加skip="$offset"
到dd
命令中, where$offset
是要跳入文件的字节数。