PiN*_*bie 13 linux file-management bash binary-files bash-scripting
您好,如何使用 Bash将n字节从一个文件写入新文件k?
可能我们正在处理二进制文件而不是 ASCII 文件,因此两半的连接应该与原始文件相同!
(有可能dd吗?)
cxw*_*cxw 14
是的。根据dd 手册页,您正在寻找类似的内容:
dd bs=1 count=60 if=_filename_1_ of=_filename_2_
dd bs=1 skip=60 count=40 if=_filename_1_ of=_filename_2_
Run Code Online (Sandbox Code Playgroud)
where_filename_n_替换为实际文件名。
bs=1意味着count和skip是字节数。 skip是要跳过多少;count是复制多少。 编辑字节数从 0 开始,而不是 1。因此,要从第一个字节开始,请使用skip=0(或不skip指定)。
作为 bash 函数,您可以使用:
# copy_nk(n, k, infile, outfile)
copy_nk() {
dd bs=1 count="$1" skip="$2" ${3:+if="$3"} ${4:+of="$4"}
}
Run Code Online (Sandbox Code Playgroud)
然后将其称为
copy_nk 60 0 infile.txt outfile.txt
Run Code Online (Sandbox Code Playgroud)
(使用 k=0因为字节数从零开始)。
使用${3:+...},您可以不使用输出文件或输入文件。例如,
cat infile.txt | copy_nk 60 0 > outfile.txt
Run Code Online (Sandbox Code Playgroud)
这是使用headbash 命令组的另一种方法:
{ head -c60 > /dev/null ; head -c40 > output.txt ; } < input.txt
Run Code Online (Sandbox Code Playgroud)
第一次head在这里读取input.txt的第一个60个字节,并将其发送给位桶。
由于这些head命令在命令组内,因此将保留 input.txt 中的文件位置。因此,第二个head将读取接下来的 40 个字节(使用基于 1 的索引从字节 61 到 100),并将其写入 output.txt。
事实上,这种方法可以推广到split类似的功能,但具有能够指定每个输出文件的长度的额外好处。假设我们有一个 100 字节的文件,我们希望将其拆分为大小为 7、50、23 和其余大小的块。我们可以这样做:
{
head -c7 > 7bytes.txt
head -c50 > 50bytes.txt
head -c23 > 23bytes.txt
cat > remaining-bytes.txt
} < input.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11383 次 |
| 最近记录: |