如何使用Powershell在txt文件中查找特定文本

如何使用Powershell在txt文件中查找特定文本,powershell,txt,Powershell,Txt,我有一个.txt文件,列出了一些用户名 比如: 我还有一个.txt文件,其中包含一些相同的用户名以及其他信息: User1 - user1@txt.com - 12341515 - yes User2 - user2@txt.com - 13134141 - no 如何从第一个文件中搜索第二个文件中的用户,然后在新的txt文件中输出第二个文件的完整行 我试过,获取内容和| where object,但我不知道如何准确搜索 这些文件没有标题 更新 文件1,我要查找的用户在哪里,如下所示 u16

我有一个
.txt
文件,列出了一些用户名

比如:

我还有一个
.txt
文件,其中包含一些相同的用户名以及其他信息:

User1 - user1@txt.com - 12341515 - yes
User2 - user2@txt.com - 13134141 - no
如何从第一个文件中搜索第二个文件中的用户,然后在新的txt文件中输出第二个文件的完整行

我试过,
获取内容
| where object
,但我不知道如何准确搜索

这些文件没有标题


更新

文件1,我要查找的用户在哪里,如下所示

u16096
原始文件2(其中包含所有用户信息)具有此顺序

u16096      Y   NAME SURNAME    name.surname@what.com           12345678

我就是这样做的。评论中的解释。我不能完全测试它,我没有你的原始文件,但它应该让你开始

#将第二个文本文件的值存储在查找映射中
$userInfos=@{}
获取内容“file2.txt”| foreach{
#使用用户名作为查找键
$username=$\替换“^(\S+).*”,“$1”
$userInfos[$username]=$_
}
#迭代第一个文件,查找用户信息,并输出到第三个文件
获取内容“file1.txt”| foreach{
$userInfos[$\ux]
}|输出文件“file3.txt”

我就是这样做的。评论中的解释。我不能完全测试它,我没有你的原始文件,但它应该让你开始

#将第二个文本文件的值存储在查找映射中
$userInfos=@{}
获取内容“file2.txt”| foreach{
#使用用户名作为查找键
$username=$\替换“^(\S+).*”,“$1”
$userInfos[$username]=$_
}
#迭代第一个文件,查找用户信息,并输出到第三个文件
获取内容“file1.txt”| foreach{
$userInfos[$\ux]
}|输出文件“file3.txt”

powershell.exe
中,我会使用内置的
findstr.exe
实用程序,与在
cmd.exe
中使用的方式完全相同:
findstr.exe/IG:“L:\ocation\first.txt”“P:\athTo\second.txt”
谢谢您的评论,我也尝试了这个,但是它不适用于我的两个文件,而且它在
cmd.exe
powershell.exe
中都能很好地使用您提供的内容。没有看到你的真实档案,我无法确定具体原因。在现有答案下的注释示例中,它看起来更像
findstr.exe/IG:“C:\temp\test2\results5.csv”“C:\temp\test2\userstotal.txt”
。这将采用
C:\temp\test2\results5.csv
中的每一行,这应该是一个用户列表,每行一个,就像在第一个文本文件示例中一样,并输出与这些字符串部分匹配的
C:\temp\test2\userstotal.txt
中的每一行。在
powershell.exe
中,我将使用内置的
findstr.exe
实用程序,与我在
cmd.exe
中使用的方式完全相同:
findstr.exe/IG:“L:\location\first.txt”“P:\athTo\second.txt”
谢谢您的评论,我也尝试了这个,但是它不适用于我的两个文件,而且它在
cmd.exe
powershell.exe
中都能很好地使用您提供的内容。没有看到你的真实档案,我无法确定具体原因。在现有答案下的注释示例中,它看起来更像
findstr.exe/IG:“C:\temp\test2\results5.csv”“C:\temp\test2\userstotal.txt”
。这将采用
C:\temp\test2\results5.csv
的每一行,这应该是一个用户列表,每行一个,就像在第一个文本文件示例中一样,并输出
C:\temp\test2\userstotal.txt
的每一行,其中部分匹配这些字符串。感谢您的快速回复,但我一定是做错了什么,因为,第三个文件是空的。请给我举个例子,我是这样说的将第二个文本文件的值存储在查找映射$userInfos=@{}获取内容“C:\temp\test2\userstotal.txt”| foreach{#使用用户名作为查找键$username=$-替换“^(\S+).*”,“$1”$userInfos[$username]=$}#迭代第一个文件,查找用户信息,并输出到第三个文件获取内容“C:\temp\test2\results5.csv”| foreach{$userInfos[$\u0.Trim()]}Out File“C:\temp\test2\usertotal_result.txt”,好的,我取出了Out文件。没有结果,我使用了相同的示例。在这一部分,$userInfos=@{你在这里放了什么?好的。我发现了什么问题。它适用于我的示例,但不适用于原始文件:(很明显,原始文件包含私人数据,我无法显示在这里,。让我问你,如果txt 2文件的大小大于2MB,它可能会失败?或者它失败,因为在原始文件中,不是-而是空格。我将更新我的问题,以便你可以看到。好的,这是大小,用户较少,它工作正常。我可以让它成为wo吗使用2mb txt文件进行rk?感谢您的快速回复,但我一定是做错了什么,因为第三个文件是空的。请给我举个例子。我是这样说的。#将第二个文本文件的值存储在查找映射中$userInfos=@{}获取内容“C:\temp\test2\userstotal.txt”|foreach{#使用用户名作为查找键$username=$\u-replace'^(\S+.*','$1'$userInfos[$username]=$\u}#迭代第一个文件,查找用户信息,并输出到第三个文件Get Content“C:\temp\test2\results5.csv”| foreach{$userInfos[$\u.Trim()]}| Out file“C:\temp\test2\usertotal\u result.txt“,好的,我取出了文件。没有结果,我使用了相同的示例。在这一部分,$userInfos=@{你在这里放了什么?}?好的,它工作了。我发现了问题所在。它适用于我的示例,但不适用于原始文件:(很明显,原始文件包含私有数据,我无法显示在这里,。让我问你,如果txt 2文件的大小大于2 MB,它可能会失败?或者它可能会失败,因为在原始文件中,不是-而是空格。我将更新我的问题,以便你可以看到。好的,这是大小,
u16096      Y   NAME SURNAME    name.surname@what.com           12345678