[英]Splitting csv into multiple files with header using awk
我正在嘗試使用 awk 將基於唯一列值的 csv 文件拆分為多個文件。我能夠使用awk -F\, '{print > $2".csv"}' example.csv
成功拆分 csv 但是它是從新文件中提交 header 列。
例如:
example.csv
Color,Car,Make
Red,Kia,Spectra
Orange,Kia,Sportage
Green,Ford,Explorer
Black,Ford,F-150
結果:
Kia.csv
Red,Kia,Spectra
Orange,Kia,Sportage
___________________
Ford.csv
Green,Ford,Explorer
Black,Ford,F-150
我想要的 output:
Kia.csv
Color,Car,Make
Red,Kia,Spectra
Orange,Kia,Sportage
___________________
Ford.csv
Color,Car,Make
Green,Ford,Explorer
Black,Ford,F-150
為了嘗試將 header 列傳遞給新文件,我嘗試了類似這樣awk -F'|' 'FNR==1{hdr=$0;next} {if (;seen[$1]++) print hdr>$2. print>$2}' example.csv
awk -F'|' 'FNR==1{hdr=$0;next} {if (;seen[$1]++) print hdr>$2. print>$2}' example.csv
awk -F'|' 'FNR==1{hdr=$0;next} {if (;seen[$1]++) print hdr>$2. print>$2}' example.csv
但不幸的是,這沒有達到預期的結果。
你快到了。 你能試試嗎:
awk -F, '
FNR==1 {header = $0; next}
!seen[$2]++ {print header > $2".csv"}
{print > $2".csv"}
' example.csv
如果您的汽車品牌種類繁多,可能會出現“打開文件過多錯誤”。 在這種情況下,請關閉引用@RavinderSingh13 答案的文件。
第一個解決方案:使用您顯示的示例,請嘗試使用以下awk
代碼。
awk -F, '
FNR==NR{
header=$0
next
}
{
outputFile=$2".csv"
}
prev!=$2".csv" || !prev{
close(prev)
print header > (outputFile)
}
{
print $0 > (outputFile)
prev=outputFile
}
' <(head -1 Input_file) <(tail -n +2 Input_file | sort -t, -k2)
第二種解決方案:僅通過讀取 Input_file 的 1 遍添加解決方案。
awk -F, -v header=$(head -1 Input_file) '
{
outputFile=$2".csv"
}
prev!=$2".csv" || !prev{
close(prev)
print header > (outputFile)
}
{
print $0 > (outputFile)
prev=outputFile
}
' <(tail -n +2 Input_file | sort -t, -k2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.