我确实有一个 CSV,看起来像这样*:
system,subject,value1,value2
example.org,thing 1,100,4
exmaple.org,thing 2,90,0
example.com,thing 1,200,0
example.com,thing 5,10,10
标题我们实际上不包括在内,但显示在这里是为了更容易阅读示例。
我想把它分成两个文件:
example.org.csv 包含:
thing 1,100,4
thing 2,90,0
example.com.csv 包含:
thing 1,200,0
thing 5,10,10
我目前的解决方案是这样工作的:
while read line; do
SYSTEM=$(echo "$line" | cut -d, -f1)
NOTTHESYSTEM=$(echo "$line" | cut -d, -f2-)
echo "${NOTTHESYSTEM}" >> "${SYSTEM}.csv"
done <$INPUT
但这工作效率非常低,并且在处理较大的文件时表现不佳。
在数字上,这意味着一个 52050 行/9 MB 的文件需要大约 250 秒才能完成拆分。
欢迎就如何改进上述脚本提出任何建议。
干杯
最佳答案
使用 awk
会更简单:
awk 'BEGIN{FS=OFS=","} {print $2, $3, $4 > $1 ".csv"}' "$INPUT"
验证:
cat example.org.csv
thing 1,100,4
thing 2,90,0
cat example.com.csv
thing 1,200,0
thing 5,10,10
关于bash - 根据字段值将一个 CSV 拆分为多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31500245/