テキストファイルから文字列を分割する簡単な方法は何ですか?

テキストファイルから文字列を分割する簡単な方法は何ですか?

string.txtとlengths.txtという2つのテキストファイルがあります。

文字列.txt:

abcdefghijklmnopqrstuvwxyz

長さ.txt

5
4
10
7

ファイルを受け取りたい

>Entry_1
abcde
>Entry_2
fghi
>Entry_3
jklmnopqrs
>Entry_4
tuvwxyz

私は200文字から56,000文字の長さの約28,000項目を作業しています。

現在私は以下を使用しています:

start=1
end=0
i=0
while read read_l
do
    let i=i+1
    let end=end+read_l
    echo -e ">Entry_$i" >>outfile.txt
    echo "$(cut -c$start-$end String.txt)" >>outfile.txt
    let start=start+read_l
    echo $i
done <lengths.txt

しかし、これは非常に非効率的です。より良いアイデアがありますか?

ベストアンサー1

一般的に言えば、テキストを処理するためにシェルループを使用したくありません。。ここでは以下を使用しますperl

$ perl -lpe 'read STDIN,$_,$_; print ">Entry_" . ++$n' lengths.txt < string.txt
>Entry_1
abcde
>Entry_2
fghi
>Entry_3
jklmnopqrs
>Entry_4
tuvwxyz

それは一つ(バッファリングを使用してread一度に1バイト(または通常のファイルの場合は複数バイト)を読み取るシェルコマンドよりも効率的です)両方のファイルを一度だけ読み取る(メモリに完全に保存せずに)コマンドは次のとおりです。シェルループで外部コマンドを実行するソリューションよりもはるかに効率的です。

-C数値がバイトではなく現在のロケールの文字である必要がある場合は、このオプションを追加してください。例のASCII文字には違いはありません。)

おすすめ記事