2017-01-18 3 views
0

OS X、フォルダに50000個のcsvファイルがあります。これらすべてのcsvファイルの指定された範囲をExcelワークシートにマージするにはどうすればよいですか?OS X、バルクcsvファイルをExcelワークシートにマージするには?

ps。これらのcsvファイルはすべて同じ形式です。それぞれに2つの列があります。私が欲しいのは、第2欄の中間部分、B45:B145です。新しいExcelワークシートでは、各csvファイルのデータを隣り合わせに貼り付ける必要があります。結果は1つのワークシートにあります。

次の提案をありがとうございます。私はこの問題の解決策を見つけました。

find . -name \*.csv -print0 | xargs -0 -L 256 awk -F, 'FNR>=45 && FNR<=145{print $2}' > BigBoy.csv

+0

これは、いくつかの追加情報を使用できる恐ろしい広範な質問です。たとえば、これらの50,000個のファイルのそれぞれが同じ種類のテーブル(列の数は同じですか?)か、50,000個のファイルがすべてExcelワークシートに異なるタブ/ページとしてマージされますか? –

+0

@MichaelDautermannありがとうございます。私は私の質問を更新しました。 – Meredith

+0

私の答えはあなたのためにうまくいきました - あなたの答えとして受け入れることを検討してください - 投票数の横にある緑色のチェックマーク/チェックマークをクリックしてください。ありがとうございました。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

答えて

0

それはあなたがしたいフィールドを抽出し、かどうかを確認するために1つのCSVファイルを使用して、以下のコマンドを試してください:

awk -F, 'FNR>=45 && FNR<=145{print $2}' AnySingleFile.csv 

それは行番号を持つすべての行の2番目のフィールド($2)を出力します45以上、かつ145以下である。-F,は、フィールドセパレータをカンマに設定する。

それが動作する場合、しようとする次のコマンドは、このことだろうが、私はそれが50,000ファイルで動作します疑う:

awk -F, 'FNR>=45 && FNR<=145{print $2}' *.csv > BigBoy.csv 

だから、私はあなたがプロセスにfindxargsを使用することをお勧め、256個のファイルを言います、時:

このような作品を命じる
find . -name \*.csv -print0 | xargs -0 -L 256 awk -F, 'FNR>=45 && FNR<=145{print $2}' > BigBoy.csv 

... は「.csvで終わるすべてのファイルを検索し、xargsにそのリストを渡しNUL文字で区切ら自分の名前を印刷します。これは、リストを分割し、初期awkがしたまさに何であろうawkに一度に256個のファイルを渡します。」

awkに256個のファイルを渡すのアイデアはすべてのための新しいプロセスを実行する必要が保存することです単一あなたの50,000 CSVファイルの1あなたは、ファイル名の長さに応じて、より大きな数で逃げることが最後に注記を参照してください

あなたの結果はBigBoy.csvにする必要があります

注1:。。。。 CSVファイルに何百もの行がある場合は、あなたがawkコードを変更した場合の性能向上が得られます:

'FNR> = 45 & & FNR < = 145 {印刷$ 2} FNRの== 145 {終了}'

注2:awk(および他のプログラム)に渡される引数の長さ(文字数)限界を用いて見出すことができる:

sysctl kern.argmax 

とOSX上で、それは262,144文字です。したがって、CSVファイル名の長さが平均8〜10文字であれば、おそらく26,000を超えるファイル名を渡すことができます。平均的な長さが260文字の場合は、1,000を超えるファイル名を渡すべきではありません。

+0

はい、 'awk -F、 'FNR> = 45 && FNR <= 145 {print $ 2 } '* .csv> BigBoy.csv'は50000個のファイルでは動作しません。しかし、「見つける。 -name \ *。csv -print0 | xargs -0 -L 256 awk -F、 'FNR> = 45 && FNR <= 145 {print $ 2}'> BigBoy.csvは私の質問を完全に解決しました。提案ありがとう。 – Meredith

関連する問題