微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 用于从另一个文件的块中编写文件的shell命令

我有一个数据文件一个包含位置列表的文件,我想从数据文件的块中生成一个文件.例:

$cat data
abcdefghijkl
$cat positions
0,2
5,8
$cutter positions data
abcfghi
@H_502_7@

是否有一个(linux)shell命令,就像我假设的“切割器”一样?
“职位”的特定格式并不重要.
我们可以假设“位置”中指定的块按递增顺序并且不重叠.
可能存在额外的“切割器”模式,其中位置计数行而不是字节.

我可以很容易地自己实现这样的程序,但我有直觉,这样的程序已经存在.

解决方法:

只需使用参数扩展中的bash子串提取,并使用给定的位置文件格式:

data=$(< data)    # read the entire file into a variable
while IFS=, read start stop; do
    printf "%s" "${data:$start:((stop-start+1))}"
done < positions
echo
@H_502_7@

输出

abcfghi
@H_502_7@

如果您的数据文件跨越多行,则必须注意位置文件以考虑换行符.

方法不需要您将数据文件读入内存:

#!/bin/bash
exec 3<data
exec 4<positions
pos=0
while IFS=, read start stop <&4; do
    ((nskip = start - pos))
    ((nkeep = stop - start + 1))
    ((pos += nskip + nkeep))
    ((nskip > 0)) && read -N $nskip <&3
    read -N $nkeep <&3
    printf "%s" "$REPLY"
done
echo
@H_502_7@
                
                                 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐