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