庆典更新庞大的CSV文件,从另一家大型csv文件
问题描述:
我需要更新庞大的CSV文件(20M行)与另一大csv文件(30K行)数据的选择行的值,庆典更新庞大的CSV文件,从另一家大型csv文件
文件进行更新是1.csv 1120120031,55121 1120127295,55115 6135062894,55121 6135063011,55215 4136723818,55215 6134857289,55215 4430258714,55121
更新文件是2.csv 112012 ,55615 6135062,55414 6135063,55514 995707 ,55721
如1_MOD.csv 1120120031,55621 1120127295,55615 6135062894,55421 6135063011,55515 4136723818,55215 6134857289,55215 4430258714,55121
国防部ifications:
- 如果$ 1 2.csv匹配1.csv $ 1子串(行1 & 2)然后 更新$ 2 1.csv按照在匹配的行2.csv的2 $第三字符;
- 匹配字符串的最大大小(行3 & 4);
- 不匹配的行保持不变(第5到7行)。
到目前为止,我设法在while循环中测试sed,但脚本需要大约31天才能完成。我相信这是一个更好的办法,如在阵列和更新1.csv与阵列AWK文件2.csv,这东西是我在awk的知识仅限
感谢
答
使用awk
我不能这样做,在2.csv
中读取,并使用第一个字段作为模式。
BEGIN {
FS = " *, *";
OFS = ",";
}
NR==FNR {
# Ensure there are no special characters in $1
if ($1 ~ /^[[:digit:]]+$/)
a[$1] = substr($2, 3, 1);
next;
} {
for (n in a)
if ($1 ~ "^"n) {
$2 = substr($2, 1, 2) a[n] substr($2, 4, length($2) - 3);
break;
}
} 1
当你有这么大的文件时,最好使用perl代替,它可能会快得多。 –