如何在两个文本文件中找到一个匹配的字符串

时间:2014-11-24 19:35:31

标签: sql file comparison substring matching

我必须使用一堆数据来txt文件(在一种情况下,每行上都有一个字符串,在另一个文件的末尾有一个换行符,它只是字符串,有空格但没有明显的断开方式除了数据)。但是文件集包含超链接。这些数据目前还没有存在于表格中 - 我不确定将其导入适当的列/数据字段的最佳方式。

我需要做的就是拉数据"字符串"出现在两个文件中。

示例File1:

http://-28uw.c.cr http://www.2xik.com http://www.365cnblog.cn http://www.blogactif.net     http://www.blogactifs.com http://www.blogalbums.com http://www.blogallerys.com ... etc. 

示例文件2:

http://en.wikipedia.org
http://stayyoungafter50.com
http://108.160.146.227
http://10tv.com
http://110mb.com

我不关心www或http或https我想要做的就是在两个文件中找到匹配的10tv.com。或cnn.com,那就是它。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

以下是我如何处理它(尽管使用PowerShell而不是SQL):

clear
pushd c:\myPath\myFolder\

#read in the contents of the files
$file1 = get-content("file1.txt") 
$file2 = get-content("file2.txt")

#loop through each row of the whitespace separated file
$file1 = $file1 | %{
    #for each line, split on whitespace characters, returning the results back in a single column
    $_ -split "\s" | %{$_}
}
#compare the two files for matching data & output this info
compare-object $file1 $file2 -IncludeEqual -ExcludeDifferent | ft -AutoSize 

popd

注意:要忽略协议,只需使用与空格分割类似的技术将其从字符串中删除;即一个正则表达式,这次是替换而不是拆分。

clear
pushd c:\temp

$file1 = get-content("file1.txt") 
$file2 = get-content("file2.txt")

$file1 = $file1 | %{
    $_ -split "\s" | %{
        $_ -replace ".*://(.*)",'$1'
    }
}

$file2 = $file2 | %{
    $_ -replace ".*://(.*)",'$1'
}

compare-object $file1 $file2 -IncludeEqual -ExcludeDifferent | ft -AutoSize 

但是,如果您更喜欢SQL解决方案,请尝试此操作(MS SQL Server):

create table f1(url nvarchar(1024))
create table f2(url nvarchar(1024))

BULK INSERT f1
FROM 'C:\myPath\myFolder\file1.txt' 
WITH ( ROWTERMINATOR =' ', FIRSTROW = 1 )

BULK INSERT f2
FROM 'C:\myPath\myFolder\file2.txt' 
WITH ( FIRSTROW = 1 )
go

delete from f1 where coalesce(rtrim(url),'') = ''
delete from f2 where coalesce(rtrim(url),'') = ''

select x.url, x.x, y.y
from
(
    select SUBSTRING(url,patindex('%://%',url)+3, len(url)) x
    , url 
    from f1 
) x
inner join 
(
    select SUBSTRING(url,patindex('%://%',url)+3, len(url)) y
    , url 
    from f2 
) y 
on y.y = x.x