将 cat 的输出与 split 命令和指定的输出目录一起使用

Ama*_*one 0 pipe split cat

我正在尝试将一个长 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指定输出目录的同时以某种方式将输出通过管道传输到命令中呢?

cas*_*cas 5

用作-输入文件名。例如

cat file.csv | tail -n +2 | split -l 500 - /mnt/outdir
Run Code Online (Sandbox Code Playgroud)

但这里没有必要cat

tail -n +2 file.csv | split -l 500 - /mnt/outdir
Run Code Online (Sandbox Code Playgroud)

或者,使用/dev/stdin

tail -n +2 file.csv | split -l 500 /dev/stdin /mnt/outdir
Run Code Online (Sandbox Code Playgroud)

过程替换

split -l 500 <(tail -n +2 file.csv) /mnt/outdir
Run Code Online (Sandbox Code Playgroud)

来自man split(GNU 版本):

split [OPTION]... [FILE [PREFIX]]

描述

将 FILE 片段输出到 PREFIXaa、PREFIXab、...;默认大小为 1000 行,默认前缀为“x”。

没有 FILE 或 FILE 为 - 时,读取标准输入。

从编写方式可以看出[FILE [PREFIX]],如果使用 PREFIX,则必须提供输入文件名。如果 FILE 和 PREFIX 都是可选的并且彼此独立,那么它将被写为[FILE] [PREFIX].