Python 使用pandas或awk合并2个基本不相等的文件
我有两个csv需要合并,文件1大约是Python 使用pandas或awk合并2个基本不相等的文件,python,awk,Python,Awk,我有两个csv需要合并,文件1大约是20gb,而其他文件只有~1000行。由于文件较大,我首先迭代较大的文件,并希望将较大的文件(比如file1)过滤为较小的文件,然后使用pandas加载/合并 File1:较大的文件如下所示 col1,col2,col3 1,1,1491795901021327897 1,2,1491795901021342873 1,3,1491795901021347247 1,4,1491795901021351620 1,5,1491795901021356612 1
20gb
,而其他文件只有~1000行。由于文件较大,我首先迭代较大的文件,并希望将较大的文件(比如file1)过滤为较小的文件,然后使用pandas加载/合并
File1:
较大的文件如下所示
col1,col2,col3
1,1,1491795901021327897
1,2,1491795901021342873
1,3,1491795901021347247
1,4,1491795901021351620
1,5,1491795901021356612
1,6,1491795901021361172
1,7,1491795901021366797
col1,col2,col3,col4,col5,col6
val1,val2,val3,1,6,1412414141412414
val1,val2,val3,1,3,1434252352352325
较小的文件如下所示
col1,col2,col3
1,1,1491795901021327897
1,2,1491795901021342873
1,3,1491795901021347247
1,4,1491795901021351620
1,5,1491795901021356612
1,6,1491795901021361172
1,7,1491795901021366797
col1,col2,col3,col4,col5,col6
val1,val2,val3,1,6,1412414141412414
val1,val2,val3,1,3,1434252352352325
我所做的一种方法是通过执行10*10**10(col1处的值)+val(col2处的值)
从两个文件中创建一个键,类似地,在较小的文件中使用col4,5。将此值保存为列表,如果列表中存在值,则为较大文件中的每一行打印该行。最后打印一个小的过滤文件。有没有更好的方法在python中或使用awk来实现这一点
最终的目的是合并,但由于20gb不能加载到pandas中,所以我正在过滤我的文件并使其变小。我相信一定有更好的方法来解决这个问题。awk
来营救吧
通过推断,我认为这就是你想要的
$ awk 'BEGIN {FS=OFS=","}
NR==1 {h=$0; next}
NR==FNR {a[$4,$5]=$0; next}
FNR==1 {print h,$3}
($1,$2) in a {print a[$1,$2],$3}' small large
col1,col2,col3,col4,col5,col6,col3
val1,val2,val3,1,3,1434252352352325,1491795901021347247
val1,val2,val3,1,6,1412414141412414,1491795901021361172
它应该很容易阅读,但如果我得到关于我的解释的反馈,我可以写解释。试试这个-
$ head f?
==> f1 <==
col1,col2,col3
1,1,1491795901021327897
1,2,1491795901021342873
1,3,1491795901021347247
1,4,1491795901021351620
1,5,1491795901021356612
1,6,1491795901021361172
1,7,1491795901021366797
==> f2 <==
col1,col2,col3,col4,col5,col6
val1,val2,val3,1,6,1412414141412414
val1,val2,val3,1,3,1434252352352325
$ awk -F, 'NR==FNR{a[$4 FS $5]=$6;next} ($1 FS $2) in a {print $0 FS a[$1 FS $2]}' f2 f1
1,3,1491795901021347247,1434252352352325
1,6,1491795901021361172,1412414141412414
$headf?
==>f1 f2请粘贴预期的输出好吗?合并的常用键是什么,请给出一个使用已发布数据的示例,合并文件的结构是什么?您是否通过将4,5
th字段与1,2
匹配来基于小文件过滤大文件?是否通过将4,5字段与1,2匹配来基于小文件过滤大文件代码>是正确您的解释是正确的。你能补充一下你的解释吗:)