bash - 根据字段值将一个 CSV 拆分为多个文件

标签 bash csv

我确实有一个 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/

相关文章:

bash:整数到字符串,使用分隔符拆分和连接

bash - sh -c 和进程替换

ruby-on-rails - 在终端输出上播放声音

python - 如何使用 pandas 将特定列设置为 int 类型

bash - 如何使用 bash 在一组参数上并行执行多个命令,如果其中至少一个失败则失败

linux - 来自 proc 文件系统的 Memused(计算 – Memtotal – Memfree )

Python:将计数器写入 csv 文件

csv - Jmeter如何覆盖查看结果树的csv文件?

将 CSV 导入 Access 的 Java 代码

Postgresql - 正则表达式拆分带有潜在引号的 csv 行