データを1行ずつ別のファイルに分割するシェルスクリプト
unixのsplitコマンドでは、任意の行数でファイルを分割できますが、1,000行のファイルを1行ごとに1,000このファイルに分割させようとしたらできません。
そこでファイルが何行であろうと、1行ごとに分割するスクリプトを作成しました。
splitコマンドでやってみる。
testfile.datを1行毎に分割して、outで始まるファイルに出力
split -line 1 testfile.dat out
devide_record.shの使い方
splitコマンドの-line 1 と同じ感じで使います。
devide_record.sh 入力ファイル 出力ファイル名
シェルスクリプト ソース
devide_record.sh
# !/bin/sh
# INPUTFILEを読み、1行を1ファイルにして出力するスクリプト
# コマンドライン引数1個目 読み込みファイル名
# コマンドライン引数2個目 出力ファイル名の最初の文字列
INPUTFILE=$1
OUTPUTFILE=$2
x=0
while read line;do
# x=$(($x+1))とする
x=$(($x+1))
ofn=$OUTPUTFILE"_"${x}".dat"
echo $line >${ofn}
done < $INPUTFILE
確認する
入力ファイルのレコード数を確認する
wc -l 入力ファイル
出力ファイルの数を確認する(出力ファイル名の最初の文字列をoutにした場合)
ls out*.dat | wc -l
参考にしたページ
shigemk2さんのページを参考にさせていただきました<(_ _)>
どんな時にこのスクリプトが役に立つか?
例えばアンケート調査データの自由記述設問をRMeCabで形態素解析する場合の前処理