这是我目前的问题:我有1800个客户编号的清单(即123456789)。我需要确定这些数字中的哪一个出现在另一个更大(4 gb)的文件中。较大的文件是所有客户信息的固定宽度文件。我知道如何在SQL中执行此操作,但就像我说它是一个平面文件。
在搜索单个号码时,我使用的是我在本网站其他地方找到的一个非常有效的命令:
get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match "123456789" }
但是,我没有专业知识将其转换为另一个命令或批处理文件,它会加载list.txt并搜索customerinfo.txt中的所有行以获取必需的字符串。
时间不是主要限制因素,因为它在测试服务器上运行,并且将是一次性项目。
非常感谢您提供的任何帮助。
答案 0 :(得分:1)
所以我感谢大家的帮助。每个人都给了我有用的信息,让我得到我的最终解决方案,所以我很感激。特别是那个问这个是编码请求的人,因为它让我意识到我需要写一些代码。
对于遇到同样问题的其他人来说,这是我最终使用的代码:
$matches = Get-Content .\list.txt
foreach ($entry in $matches)
{ $results = get-content FiletoSearch -ReadCount 1000 | foreach { $_ -match $entry }
if ($results -eq $null) {
$entry }
else {
"found"}
}
这样可以找到'找到所有找到的东西(这是我不需要的信息),并在找不到它时找回所搜索的值(这是我需要的信息)。
答案 1 :(得分:0)
match
比较器可以处理多个值,您可以用条形|来区分它们字符。
e.g。
get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match "DEF|YZ" }
您还可以阅读文件的内容,并用您选择的字符替换换行符。因此,如果list.txt是要搜索的值列表,例如
DEF
XY
然后您可以使用join运算符读取它并将其转换为以条形为单位的列表:
(Get-Content list.txt) -join "|"
将它们放在一起,您应该有解决方案:
$listSearch = (Get-Content list.txt) -join "|";
get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match $listSearch}