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

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

我正在尝试将一个较长的 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]]

描述

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

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

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

相关内容