Pipe
將 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
在指定輸出目錄的同時以某種方式將輸出傳遞到命令中呢?
-
用作輸入文件名。例如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]
.