5行目(最初の4行はヘッダー行)から数えて100行ごとに大きなテキストファイルを分割し、元のヘッダーを含む個々の.txtファイルを出力できるツールまたはスクリプト(TextwranglerまたはTerminal)を探しています。
例えば
入力:
File.txt
line1 / line4 HEADER
...
line5 / line265 DATA
出力:
File_01.txt
line1/line4 HEADER
line5/line104 DATA
File_02.txt
line1/line4 HEADER
line5/line104 DATA
File_03.txt
line1/line4 HEADER
line5/line65 DATA
テキストファイルは、重要な場合に備えてWindowsの改行(CR LF)を使用します。
私は現在これを手動で行っているので、このプロセスをより効率的にすることができる提案は大歓迎です。
header.txt
に入れます。split --lines=100 data.txt
を使用したデータ(これにより、それぞれxaa xab xacなどの名前が付けられた100行のファイルが多数生成されます)for a in x??; do cat header.txt $a > $a.txt; done
これにより、完成したデータファイル(ヘッダー付き)はxaa.txt xab.txt xac.txt ...
と呼ばれます。データ量が多すぎる場合(または分割する行数が少ない場合)、xxxファイルを十分に分割できない場合は、4文字の名前付きファイルが作成されます。その場合、上記のfor
ステートメントに追加の?
を挿入します。
編集:
ヘッダーの抽出を自動化するには、head -4 origdata.txt > header.txt
を使用して最初の4行を抽出します。 tail -n +4 origdata.txt > data.txt
を使用して、最初の4行を除くすべてを抽出します。これで、ヘッダー付きのファイルとデータ付きのファイルが2つあります。これをスクリプトに組み合わせるのはそれほど難しいことではありません。 (今日はbashにアクセスできません)
Nifleから提供された回答に基づいて、提案されたコマンドを実行し、元のファイル名を出力に追加し、一時ファイルをクリーンアップするスクリプトを作成しました。
#!/bin/bash
FILE=$(ls -1 | grep filename.txt)
NAME=${FILE%%.txt}
head -4 $FILE > header.txt
tail -n +5 $FILE > data.txt
split -l 100 data.txt
for a in x??
do
cat header.txt $a > $NAME.$a.txt
done
mv $FILE $NAME.orig.txt
rm header.txt data.txt x??
出来上がり!