2016-05-23 36 views

答えて

4

まず、ヘッダとコンテンツを分離する必要があります

header=$(head -1 $file) 
data=$(tail -n +2 $file) 

は、その後、あなたはあなたがデータチャンクのサイズと結果のファイル名のパターンを指定する必要がオプションで

echo $data | split [options...] - 

を分割したいです。末尾の-は、stdinからデータを読み取るためにsplitと指定されているため、削除しないでください。

次に、あなたはあなたが明らかにループの中でその最後の部分を行う必要がありますが、その正確なコードがsplit操作のために選ばれたプレフィックスに依存し、各ファイルの先頭に

sed -i "1i$header" $splitOutputFile 

をヘッダに挿入することができます。

1

私のスクリプトがターゲットとしていたMacシステムでこれが正しく動作しないことが判明しました(理由はAppleですか?なぜですか?)私は最終的には概念の証明としてうまくいったprintfオプションを使いました。私は一時的なファイルをramdiskなどに入れてパフォーマンスを向上させることでこれを強化するつもりです。これは、ディスクに束を置き、おそらく遅くなるからです。

#!/bin/sh 

# Pass a file in as the first argument on the command line (note, not secure) 
file=$1 

# Get the header file out 
header=$(head -1 $file) 

# Separate the data from the header 
tail -n +2 $file > output.data 

# Split the data into 1000 lines per file (change as you wish) 
split -l 1000 output.data output 

# Append the header back into each file from split 
for part in `ls -1 output*` 
do 
    printf "%s\n%s" "$header" "`cat $part`" > $part 
done 
関連する問題