それはあなたがしたいフィールドを抽出し、かどうかを確認するために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
だから、私はあなたがプロセスにfind
とxargs
を使用することをお勧め、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を超えるファイル名を渡すべきではありません。
これは、いくつかの追加情報を使用できる恐ろしい広範な質問です。たとえば、これらの50,000個のファイルのそれぞれが同じ種類のテーブル(列の数は同じですか?)か、50,000個のファイルがすべてExcelワークシートに異なるタブ/ページとしてマージされますか? –
@MichaelDautermannありがとうございます。私は私の質問を更新しました。 – Meredith
私の答えはあなたのためにうまくいきました - あなたの答えとして受け入れることを検討してください - 投票数の横にある緑色のチェックマーク/チェックマークをクリックしてください。ありがとうございました。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –