web-dev-qa-db-ja.com

ファイルを行ごとに分割し、結果のファイル拡張子を制御する

ファイル分割のための標準コマンドがあります-分割。

たとえば、wordsファイルを10000行のいくつかのチャンクに分割したい場合は、次のように使用できます。

split -dl 10000 words wrd

そして、wrd.01、wrd.02などの形式のいくつかのファイルを生成します。

しかし、それらのファイルに特定の拡張子を付けたいです-たとえば、wtd.01.txt、wrd.02.txtファイルを取得したいのですが。

それを行う方法はありますか?

29
Rogach

splitではなく、後で簡単に名前を変更したり、awkで変更したりできます。

awk '{filename = "wrd." int((NR-1)/10000) ".txt"; print >> filename}' inputfile
12
Kevin

これは当時は利用できませんでしたが、より多くの 最近 バージョン(≥ 8.16)のgnu splitを使用すると、--additional-suffix結果の拡張機能を制御するスイッチ。 man splitから:

--additional-suffix=SUFFIX
              append an additional SUFFIX to file names.

そのオプションを使用するとき:

split -dl 10000 --additional-suffix=.txt words wrd

結果のピースは自動的に.txtで終わります:

wrd00.txt
wrd01.txt
.........
52
don_crissti

このようなタスクは、シェルで管理するのが最適です。 splitを使用してから、単純なループを記述してファイルの名前を変更します。例えば。

for file in wrd.*
do
    mv "$file" "$file.txt"
done

wrd.01、wrd.02などのファイルの名前を変更して、拡張子がすべて.txtになるようにします。

14
Kyle Jones