簡體   English   中英

在bash中將csv的單列水平拆分為bash中的多個較小的csv文件

[英]Split single column of csv horizontally in bash into multiple smaller csv files in BASH

我正在使用bash,並且在csv中只有一 (不是行) ,沒有標題-samplefile.csv

111 
222 
333 
444 
555 
666 
777 
888

在這種情況下,我想將其拆分為(說)2個4行和單個列的 csv文件(如果奇數說9行,那么5和4)帶有數據的csv文件

output1.csv(1列4行)

111
222
333
444

和output2.csv(1列4行)

555
666
777
888

Csplit不會創建csv文件,如下所示: 將文件拆分為x個文件,文件名已編號

有什么建議么?

使用awk嘗試使用awk '{print $0 > ("output"i+1".csv")}!(NR%4){i++}' file

演示:

$ ls 
file

$ cat file 
111 
222 
333 
444 
555 
666 
777 
888

$ awk '{print $0 > ("output"i+1".csv")}!(NR%4){i++}' file

$ ls
file  output1.csv  output2.csv

$ cat output1.csv 
111 
222 
333 
444 

$ cat output2.csv 
555 
666 
777 
888

說明:

模數運算符是此處的關鍵,我們要在每四行之后分割輸入行:

$ awk '{print NR%4,$0}' file
1 111
2 222
3 333
0 444
1 555
2 666
3 777
0 888

當然,模數(余數)為四分之四為零,因此我們利用這一事實來增加文件計數器。 !(NR%4)NR%4==0簡寫,因為當我們希望執行塊{i++}時,零評估為false,而NR%4為零,因此我們將其否定。

$ awk '{print NR%4,$0,"output"i+1".csv"}!(NR%4){i++}' file
1 111 output1.csv
2 222 output1.csv
3 333 output1.csv
0 444 output1.csv
1 555 output2.csv
2 666 output2.csv
3 777 output2.csv
0 888 output2.csv

您在尋找什么只是帶有-n選項的split命令

split -nl/2 input output

將為您完成這項工作。

從拆分手冊頁:

-n, --number=CHUNKS
              generate CHUNKS output files.  See below
 CHUNKS may be: N       split into N files based on size of input K/N     output Kth of N to stdout l/N     split into N  files  without  splitting  lines  l/K/N
       output Kth of N to stdout without splitting lines r/N     like 'l' but use round robin distribution r/K/N   likewise but only output Kth of N to stdout

這對我有用。 我在excel中打開了生成的csv,並且其格式正確。 我還沒有弄清楚如何刪除結尾的逗號,但是根據許多csv格式定義,這似乎可以接受。 第一個xargs調用將逗號添加到文件的每一行。 第二個xargs一起批處理四個。 如果將其重定向到文件(> new.csv),則可能是您要查找的文件。

>cat my.csv
111
222
333
444
555
666
777
888 
>cat my.csv | xargs -n 1 -i echo \{\}, | xargs -n 4 
111, 222, 333, 444,
555, 666, 777, 888,

我可以使用split命令。

n = awk 'END{print int(NR/2)}' file_name && split -l $ n file_name

cat output1
111
222
333
444


cat output2 
555
666
777
888

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM