我有一个数据文件和一个包含位置列表的文件,我想从数据文件的块中生成一个文件.例:
$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] 举报,一经查实,本站将立刻删除。