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是要跳入文件的字节数。
| 归档时间: |
|
| 查看次数: |
6880 次 |
| 最近记录: |