分割コマンドを使用した分割ファイルの命名

分割コマンドを使用した分割ファイルの命名

私はディレクトリ内のすべてのファイルを読み込み、条件付きチェックを実行し、レコード(行)の数に基づいていくつかのファイルを分割するシェルスクリプトを作成しています。

abc.txtファイルをabc(AAまたは01).txtに分割したいと思います。 (abcで始まり、.txtで終わる限り、何も構いません。)

これを行う簡単な方法はありますか?

分割コマンドを使用しています。

split -l $line_count $file $????   

混乱しています。代わりに何を使うべきですか? ? ?

私も別のアプローチで開いていますが、残りのスクリプトはすでに準備されているので、???のみを変更することを好みます。

非常にありがとう

ベストアンサー1

努力する:

split -l 5 --additional-suffix=.txt abc.txt abc

または文字の代わりに数字が必要な場合:

split -l 5 -d --additional-suffix=.txt abc.txt abc

abcファイル名の後に追加するプレフィックス

オプションをサフィックスとして欲しいので、.txtオプションを追加しました--additional-suffix=.txt

オプションは、文字の代わりに数字を使用することを-d示します。split

はい

ファイルを含むディレクトリから始めましょう。

$ ls
abc.txt

それではファイルを分割してみましょう。

$ split -l 5 -d --additional-suffix=.txt abc.txt abc
$ ls
abc00.txt  abc01.txt  abc02.txt  abc03.txt  abc.txt

解決策 1: シェルの使用

GNUパーティションの現在のバージョンはこの--additional-suffixオプションをサポートしており、splitGNU coreutilsの一部です。これは、最終的にこのオプションをすべてのLinuxシステムで使用できることを意味します。

split現在のファイルが不足しているシステムの場合、回避策はファイルの作成後にファイルの名前を変更することです。たとえば、

$ split -l 5 -d abc.txt abc
$ for f in ./abc??; do mv "$f" "$f.txt"; done
$ ls
abc00.txt  abc01.txt  abc02.txt  abc03.txt  abc.txt

上記では、デフォルトのサフィックス長2が適用されたと仮定します。それ以外の場合は、?使用しているサフィックスの長さに合わせて数字を変更してください。たとえば、サフィックス長5を使用する場合:

$ split -l 5 -a 5 -d abc.txt abc
$ for f in ./abc?????; do mv "$f" "$f.txt"; done
$ ls
abc00000.txt  abc00001.txt  abc00002.txt  abc00003.txt  abc.txt

解決策2:awkの使用

ここで、オプションはl各分割ファイルに含まれる行数を指定し、d分割ファイル名に使用されるビット数を指定します。d十分大きいことを確認してください。

$ awk -v l=5 -v d=2 '{n="0000" int((NR-1)/l); f="abc" substr(n,length(n)+1-d) ".txt"; if (f!=old) close(old); old=f; print >f}' abc.txt
$ ls
abc00.txt  abc01.txt  abc02.txt  abc03.txt  abc.txt

おすすめ記事