2010-03-05 106 views
3

是否有标准Linux命令可以用来按块读取文件块?例如,我有一个大小为6kB的文件。我想读取/打印第一个1kB,然后是第二个1kB ... 在这种情况下似乎猫/头/尾不会工作。Linux shell命令按块读取/打印文件块

非常感谢。

+0

也许命令dd? – Karussell 2010-03-05 19:20:02

回答

3

DD会做

dd if=your_file of=output_tmp_file bs=1024 count=1 skip=0 

,然后跳到第二个块为1,依此类推。

然后您只需读取output_tmp_file即可获取该块。

+0

感谢您的回复,它看起来绝对很有希望。我做了之后: dd if = eco.log bs = 1024 count = 1 skip = 1(我喜欢输出到stdout) 我得到了我想要的信息后面跟着: 0 + 1记录 0 + 1记录 复制508字节(508 B),6.6e-05秒,7.7 MB /秒 如何忽略上述I/O状态信息?我配了dd,而且没有这样的选择。 – datasunny 2010-03-05 19:51:18

+0

没关系,只是发现那些I/O stat被输出到stderr。我可以轻易忽略这些。谢谢大家! – datasunny 2010-03-05 19:56:45

1

split可以将文件分割成由给定的字节件数

6

你可以在一个循环中与read -n做到这一点:

while read -r -d '' -n 1024 BYTES; do 
    echo "$BYTES" 
    echo "---" 
done < file.dat 
+0

如何让它在十六进制中打印? – 2011-04-07 13:11:25

0

可以使用fmt

如10bytes

$ cat file 
a quick brown fox jumps over the lazy dog 
good lord , oh my gosh 

$ tr '\n' ' '<file | fmt -w10 file 
a quick 
brown fox 
jumps 
over 
the lazy 
dog good 
lord , oh 
my gosh 

每行10个字符。如果你想读的第二块,它传递给工具,如AWK ..eg

$ tr '\n' ' '<file | fmt -w10 | awk 'NR==2' # print 2nd chunk 
brown fox 

为了节省每块到文件,(或者你可以使用split用-b)

$ tr '\n' ' '<file | fmt -w10 | awk '{print $0 > "file_"NR}' 
1

是你试图实际上一个文本文件?喜欢用你的眼睛?尝试lessmore