我正在尝试将一个长 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指定输出目录的同时以某种方式将输出通过管道传输到命令中呢?
用作-输入文件名。例如
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].