長いcsvをファイルごとに500行に分割しようとしています。出力ファイルが特定のディレクトリにあることを望み、csvの最初の行を省略したいと思います。
split
以下をパイピングして、CSVの最初の行を使用して維持できますcat
。
cat file.csv | tail -n +2 | split -l 500
次のように出力ディレクトリを指定できます。
split -l 500 file.csv /mnt/outdir
しかし、次のようにしようとすると:
cat file.csv | tail -n +2 | split -l 500 /mnt/outdir
/mnt/outdir
これは私が分割したいファイルだと思い、私にsplit: /mnt/outdir: Is a directory
。
もしそうなら、split
出力ディレクトリを指定しながら、どのように出力をコマンドにパイプすることができますか?
答え1
-
入力ファイル名として使用されます。例えば
cat file.csv | tail -n +2 | split -l 500 - /mnt/outdir
しかし、ここではそうする必要はありませんcat
。
tail -n +2 file.csv | split -l 500 - /mnt/outdir
または以下を使用してください/dev/stdin
。
tail -n +2 file.csv | split -l 500 /dev/stdin /mnt/outdir
またはプロセスの交換:
split -l 500 <(tail -n +2 file.csv) /mnt/outdir
man split
(GNUバージョン)から:
split [OPTION]... [FILE [PREFIX]]
説明する
PREFIXaa、PREFIXab、...に出力FILEフラグメント。デフォルトのサイズは1000行で、デフォルトのプレフィックスは「x」です。
FILE がない場合、または FILE が - の場合、標準入力を読み込みます。
書かれた方法でわかるように、[FILE [PREFIX]]
PREFIXを使用すると、〜しなければならない入力ファイル名を入力します。 FILEとPREFIXの両方がオプションです。互いに独立、で書かれます[FILE] [PREFIX]
。