将.TTL文件与CSV文件进行比较并提取"类似的"结果成新文件

时间:2018-03-20 14:51:07

标签: awk grep compare comparison gawk

我有一个大型CSV文件,其中填充了数百万条不同的行,每行都有以下格式:

/resource/example

现在我还有一个.TTL文件,其中每一行可能具有完全相同的文本。现在,我想从包含与当前CSV文件相同的文本的.TTL文件中提取每一行到新的CSV文件中。

我认为这可以使用grep,但这是一个linux命令,我非常非常缺乏经验。是否可以在Windows中执行此操作?我可以编写一个Python脚本来比较这两个文件,但由于这两个文件都包含数百万行,我认为这些行几乎需要几天才能执行。任何人都可以指出我正确的方向如何做到这一点?

提前致谢! :)

编辑:

来自.TTL文件的示例行:

<nl.dbpedia.org/resource/Algoritme>; <purl.org/dc/terms/subject>; <nl.dbpedia.org/resource/Categorie:Algoritme>; . 

当前CSV文件中的示例行:

/resource/algoritme 

因此,使用这两个示例行,它应该将.TTL文件中的行导出到新的CSV文件中。

1 个答案:

答案 0 :(得分:1)

使用GNU awk。首先阅读CSV并将其哈希到a。然后将a中的每个条目与TTL文件中的每一行进行比较:

$ awk 'BEGIN { IGNORECASE = 1 }  # ignoring the case
       NR==FNR { a[$1]; next }   # hash csv to a hash
       {
           for(i in a)           # each entry in a
               if($0 ~ i) {      # check against every record of ttl
                   print         # if match, output matched ttl record
                   next          # and skip to next ttl record
               }
       }' file.csv file.ttl
<nl.dbpedia.org/resource/Algoritme>; <purl.org/dc/terms/subject>; <nl.dbpedia.org/resource/Categorie:Algoritme>; .

根据文件的大小,它可能会很慢,也许可以更快,但不是基于OP中提供的信息。