簡體   English   中英

根據條件將bash中的CSV文件拆分為多個文件

[英]Split CSV file in bash into multiple files based on condition

我的 csv 文件有多行數據,我想根據一個屬性將其拆分為多個文件。

beeline -u jdbc:hive2:<MYHOST> -n <USER> -p <PASSWORD> --silent=true --outputformat=csv2 -f <SQL FILE> > result_+%Y%m%d_%H%M%S.csv

帶有ORDER BY ID SQL 代碼是從創建單個 CSV 的直線觸發的。

cat sql.csv
"attr;attr;ID;attr"
"data;data;XXXX;date"
"data;data;XXXX;date"
"data;data;YYYYY;date"
"data;data;YYYYY;date"
"data;data;BBBBB;date"
"data;data;BBBBB;date"

期望的結果是在識別出新ID進行拆分,並在文件名中使用該ID

file_1_ID_XXXX_+%Y%m%d_%H%M%S :

attr   attr    ID  attr
data    data    XXXX    date
data    data    XXXX    date

file_2_ID_YYYYY_+%Y%m%d_%H%M%S :

attr   attr    ID  attr
data    data    YYYYY   date
data    data    YYYYY   date

如果我理解您的問題,您可以將 sql 生成的 csv 文件拆分為您顯示的 3 個文件,只需使用幾個變量、字符串連接然后重定向到輸出文件,例如

awk -v field=a -v n=1 -v dt=$(date '+%Y%m%d_%H%M%S') '
    FNR == 1 {hdg=$0; next}
    a != $3 {a = $3; name="file_"n"_ID_"a"_"dt; n++; print hdg > name}
    {print $0 > name}
' sqldata

示例輸入文件

您的sqldata文件包含:

$ cat sqldata
attr    attr    ID  attr
data    data    XXXX    date
data    data    XXXX    date
data    data    YYYYY   date
data    data    YYYYY   date
data    data    BBBBB   date
data    data    BBBBB   date

示例使用/輸出文件

簡單地將 awk 腳本復制並用鼠標中鍵粘貼到終端中,並使用正確的文件名讀取將產生以下三個輸出文件:

$ cat file_1_ID_XXXX_20190805_033514
attr    attr    ID  attr
data    data    XXXX    date
data    data    XXXX    date

$ cat file_2_ID_YYYYY_20190805_033514
attr    attr    ID  attr
data    data    YYYYY   date
data    data    YYYYY   date

$ cat file_3_ID_BBBBB_20190805_033514
attr    attr    ID  attr
data    data    BBBBB   date
data    data    BBBBB   date

仔細看看,讓我知道這是否是你的意圖。 如果沒有,請告訴我,我很樂意為您提供進一步幫助。

暫無
暫無

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

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