[英]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.