Unix 按字段比较两个大型csv文件并保存输出

Unix 按字段比较两个大型csv文件并保存输出,unix,awk,Unix,Awk,我试图比较两个非常大的csv文件,并通过两个文件中的自由文本字段进行比较。我试过使用awk,例如 awk -F, 'FNR==NR{a[$2]++;next} a[$2]' table1.csv table2.csv > duplicates.csv 但是输出csv文件的格式不正确,可能是因为自由文本字段包含逗号。我想将表1中的整个重复行保存在重复表中。谢谢你的帮助。我理解对了吗?你需要类似以下的东西: $ more filea fileb :::::::::::::: filea ::

我试图比较两个非常大的csv文件,并通过两个文件中的自由文本字段进行比较。我试过使用awk,例如

awk -F, 'FNR==NR{a[$2]++;next} a[$2]' table1.csv table2.csv > duplicates.csv

但是输出csv文件的格式不正确,可能是因为自由文本字段包含逗号。我想将表1中的整个重复行保存在重复表中。谢谢你的帮助。

我理解对了吗?你需要类似以下的东西:

$ more filea fileb
::::::::::::::
filea
::::::::::::::
1,a
2,b
3,c
::::::::::::::
fileb
::::::::::::::
1,d
x,e
3,f
$ awk 'BEGIN {
    while (getline a < "filea" && getline b < "fileb") {
        split(a, aa, ",")
        split(b, bb, ",")
        if (aa[1] == bb[1]) {
            print a, b
        }
    }
}'
1,a 1,d
3,c 3,f
$more filea fileb
::::::::::::::
菲拉
::::::::::::::
1、a
2,b
3,c
::::::::::::::
文件
::::::::::::::
1,d
x、 e
3,f
$awk'开始{
而(获取行a<“文件a”和&获取行b<“文件b”){
拆分(a,aa,“,”)
拆分(b,bb,“,”)
if(aa[1]==bb[1]){
打印a、b
}
}
}'
1,a,d
3,c3,f

AWK很难解析CSV。带逗号的字段如何被引用或转义?它们只是被引用,字段之间的逗号和引号之间没有空格。我可以很好地阅读python/pandas中的数据,但我想知道是否有一个很好的单行程序。您能提供一些示例输入和输出吗?如果您使用的是Gnu Awk版本4,则可以使用
FPAT
变量。。请参阅:对于awk的早期版本,此页面看起来很有希望: