我有一个包含多行记录的大文件。例如:
domain1 NS ns1
domain1 NS ns2
domain1 NS ns3
domain2 NS dnsx
生成以下形式的 CSV 的最快方法是什么
domain1,ns1,ns2,ns3
domain2, dnsx
我已经尝试过 php 和 groovy 脚本,但是对于 1Gb 文件(读取)(以及随后写入 csv 文件)而言,处理器加载时间太长。
我认为应该有比我正在做的更好的编程方法。基本上,我正在创建一个列表/数组来包含记录,并检查最后一个元素是否在当前正在检查的行中找到相同的域。
PS 提到了 groovy/php,但回应可能与这些特定的脚本语言无关。
答案1
假设所有具有相同域的记录都分组在一起,这个 awk 程序将占用非常小的内存(无法说出 CPU 负载是多少)
awk '
$1 != domain {
if (domain) print ""
printf "%s", $1
domain = $1
}
{printf ",%s", $3}
END {print ""}
' file