Awk 将.TTL文件与CSV文件进行比较并提取;类似的“;将结果保存到新文件中

Awk 将.TTL文件与CSV文件进行比较并提取;类似的“;将结果保存到新文件中,awk,grep,compare,comparison,gawk,Awk,Grep,Compare,Comparison,Gawk,我有一个巨大的CSV文件,里面有数百万行不同的内容,每行的格式如下: /resource/example 现在我还有一个.TTL文件,其中每一行可能都有完全相同的文本。现在,我想将包含与当前CSV文件相同文本的.TTL文件中的每一行提取到一个新的CSV文件中 我认为这是可能的使用grep,但这是一个linux命令,我非常,非常缺乏经验。可以在Windows中执行此操作吗?我可以编写一个Python脚本来比较这两个文件,但由于这两个文件都包含数百万行代码,因此我认为执行这两个文件实际上需要几天的

我有一个巨大的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>; . 
$ 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>; .

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

使用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>; .
$awk'BEGIN{IGNORECASE=1}#忽略案例
NR==FNR{a[$1];next}#哈希csv到哈希
{
(a中的i)#a中的每个条目
如果($0~i){#检查ttl的每个记录
打印#如果匹配,则输出匹配的ttl记录
下一条#并跳到下一条ttl记录
}
}'file.csv file.ttl
; ; ; .

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

请发布几行文件和预期输出。来自.TTL文件的示例行:。当前CSV文件中的示例行:/resource/algoritme,因此使用这两个示例行,它应该将.TTL文件中的行导出到新的CSV文件中。有什么想法吗?:)TTL文件和CSV文件有多大?这两个文件都大约有450万行,没有这方面的经验,但是在Linux中你可以
grep-f CSV TTL
,但是速度会慢一些,因为CSV中的每个记录
grep
都会搜索整个TTL,所以它是n*m,但是上面的解决方案大约是这个的一半。没有,抱歉。不过,请让我们知道。未来几代人将从中获益(量子计算机和
grep
,您知道:)运行时更新:使用您的AWK脚本和这些文件,我可以获得大约4天的运行时间(CPU:i5-4570 3.2GHz和8GB RAM)。它仍然很长,但比使用Python运行20天要好得多。哈哈。不酷。关于这些数据还有什么需要了解的吗?例如,每个ttl条目是否只有一个csv条目,以便我们可以删除使用过的csv条目以释放mem?当哈希到一个ttl条目时,csv中的重复项将被删除。