Pipe

將 cat 的輸出與 split 命令和指定的輸出目錄一起使用

  • July 19, 2021

我正在嘗試將長 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

但這裡沒有必要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 行,預設 PREFIX 為“x”。

沒有 FILE,或者當 FILE 為 - 時,讀取標準輸入。

從編寫方式可以看出[FILE [PREFIX]],如果使用 PREFIX,則必須提供輸入文件名。如果 FILE 和 PREFIX 都是可選的並且彼此獨立,那麼它將被寫為[FILE] [PREFIX].

引用自:https://unix.stackexchange.com/questions/659018