使用 Select-String 在 powershell 中检查两个 .txt 文件

2024-01-31

我对编写 powershell 脚本完全陌生。到目前为止,我使用普通批次来达到我的目的,因为这是我公司的要求。在此批处理中,我使用嵌套的 foo 循环来比较两个 .txt 文件,具体来说,我想要执行以下操作:

  • 文件 1 包含大量字符串。每个字符串都位于一个单独的行中,前面有数字和分号,如下所示:658;RMS
  • 文件 2 是一些长文本。

目的是计算文件 1 中每个字符串在文件 2 中出现的次数,例如RMS 被计数 300 次。

由于我之前的代码在运行时方面存在一些巨大的缺陷(文件 1 大约有 400 行,文件 2 500.000 行),我了解到 Powershell 中的 Select-String 效率更高。 然而,当我正在阅读一些教程时,我不清楚如何继续这里,除了我必须在 .bat 中运行 powershellcode 之外。 我最大的问题是我不确定如何以及在哪里放置我的“变量”,所以两个输入文件 1 和 2

到目前为止,我正在测试这样的 Select-String 方法:

powershell -command "& {Select-String -Path *.txt -Pattern "RMS"}"

我的假设是利用管道,所以像这样:

powershell -command "& {<<path to file one, should read line by line>> | Select-String -Path File2.txt -Pattern "value of file 1"}"

但是,我没有让这个工作。 Powershell 期待某种psobject在第一根管道之前?


为了获得最佳性能,我会像这样处理这个任务。

  • 读取包含条款的 CSV 文件(它is一个 CSV,带有;分隔符)
  • 将另一个文件读入字符串
  • 对于每个术语,计算它在目标字符串中出现的频率(使用.IndexOf())

例如

$data = Import-Csv "file1.txt" -Delimiter ";" -Header ID,Term 
$target = Get-Content "file2.txt" -Raw
$counts = @{}

foreach ($term in $data.Term) {
    $index = -1
    $count = 0
    do {
        $index = $target.IndexOf($term, $index + 1)
        if ($index -gt -1) { $count++ } else { break; }
    } while ($true);
    $counts[$term] = $count
}

$counts 

Notes

  • Import-Csv将自动使用输入文件中的第一行作为标题。如果您的文件已经有标题,您可以删除-Headers范围。
  • Get-Content默认情况下,将把输入文件读取到行数组中。但对于这种方法,将整个文件作为一个大字符串是正确的 - 这就是-Raw does.
  • @{}创建一个空的哈希表
  • $data.Term将访问 CSV 的一列
  • .IndexOf()区分大小写。默认情况下,PowerShell 不区分大小写,但像这样的本机 .NET 方法不会改变其行为。这可能是也可能不是您需要的 - 使用.ToLower() on the $target$term如果你不关心情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Select-String 在 powershell 中检查两个 .txt 文件 的相关文章

  • 使用 shell_exec 将 PHP 转换为 Powershell

    如果我运行 output shell exec powershell get service dhcp 我得到了 dhcp 服务的完美输出 显示正在运行 但如果我运行 output shell exec powershell get use
  • 通过快捷方式更改桌面的 Powershell 脚本

    关于为什么从 w in PS 运行时有效 但从定义为以下的快捷方式运行时无效的任何想法和建议 SystemRoot system32 WindowsPowerShell v1 0 powershell exe File C Users bi
  • 在 C# 中编写批处理脚本的好方法是什么?

    我想用 C 编写简单的脚本 我通常会使用 bat 或 4NT btm 文件 复制文件 解析文本 询问用户输入等等 相当简单 但在批处理文件中正确执行这些操作确实很困难 例如没有例外 我熟悉像 AxScript 这样的命令行 脚本 包装器 这
  • 隐藏powershell输出

    我有以下脚本 param 参数 强制 true 字符串 dest New Item force path dest 1 itemtype directory New Item force path dest 2 itemtype direc
  • Powershell 中的反斜杠

    为什么 split 参数的字符串需要两个反斜杠 而 join 参数的字符串只需要一个反斜杠 反引号是 Powershell 中的转义字符 字符前面的反斜杠有什么作用 path C folder test unit1 testing resu
  • 从命令行减少 PNG 文件的位深度

    我可以从 CLI 执行什么命令或一系列命令来递归遍历目录树并将该树中所有 PNG 文件的位深度从 24bpp 减少到 16bpp 命令应该保留 alpha 层并且不应该增加 PNG 文件的大小 事实上减少会更好 我有一个基于 OSX 的系统
  • Windows 相当于 Unix find 命令,用于搜索多种文件类型

    虽然在 Windows 中安装了 cygwin 可以提供大部分 unix 命令 但我仍然想知道如何使用 Windows find 命令在一个命令中搜索多个文件类型 ie find name cpp o name h o name java
  • 防止集成终端自动打开

    每当我在 VS Code 中打开 PowerShell 脚本时 集成终端就会打开 如何防止集成终端自动打开 我搜索了 终端 的设置 但没有发现与自动启动相关的内容 VSCode 会记住您的上一次会话 因此 如果关闭终端并退出 VSCode
  • 替换第二个和第三个下划线之间的任何内容

    我有一个 PowerShell 脚本行 它用 替换 删除 第二个和第三个下划线之间的字符 get childitem pdf rename item newname name replace p L p L 例子 12345 00001 L
  • 在 Firebase Cloud Functions 中仅部署单个非导出函数

    我在我的 firebase 云函数文件中创建了以下函数 function whatsMyName name return your name is name 当我在命令行中运行以下命令时 该函数is部署 firebase deploy on
  • Powershell 数组到带引号的逗号分隔字符串

    我有一个数组 需要输出到逗号分隔的字符串 但我还需要引号 这是我所拥有的 myArray file1 csv file2 csv a myArray join a 输出为 a最终 file1 csv file2 csv 我想要的输出是 fi
  • 如何获取管道对象的数量?我不想累积管道来缓冲

    假设我有一些 powershell 代码 function count pipe CmdletBinding param Parameter ValueFromPipeline true object inputObject process
  • SQL Server 2008:如何使用 powershell 获取“消息”选项卡(在 Management Studio 中)输出

    我在用invoke sqlcmd管理我的数据库 它工作得很好 我将 Management Studio 中 结果 选项卡的输出保存到日志文件中 当我做一个BACKUP DATABASE 输出是在 消息 选项卡上完成的 我想将其保存在日志文件
  • 如何为 Visual Studio 命令提示符创建批处理文件

    我想创建一个批处理文件Visual Studio 2008 x64 Cross Tools Command Prompt要在我的电脑上连续执行某些操作 场景如下 svn update delete some files MSBuild My
  • 使用 powershell 版本 2 查询 AD

    我们有由 Windows 7 和 Windows 10 组成的混合桌面操作系统 我有一个登录脚本 该脚本从每次用户登录时运行的 powershell 脚本收集各种信息 Windows 7 powershell 仅是版本 2 这意味着我无法使
  • PowerShell 脚本 ffmpeg

    作为一名优秀的 Windows 系统管理员 我终于开始学习 PowerShell 话虽这么说 我不知道我在做什么 惊讶 惊讶 我认为远离生产环境 在家里使用 PowerShell 对我来说将是一次很好的学习经历 最近 我开始使用 FFMPE
  • 在 bash 中快速引用 stdout(即上一个命令的输出)?

    有没有办法快速 例如通过键盘快捷键等 引用写入到 stdout 的上一个命令的输出 例如 如果我这样做 which rails 它回来了 usr local bin rails然后我想在 textmate 中打开该文件 我可以像这样重新输入
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • System.IO.FileInfo 的“目标”成员记录在哪里?

    PowerShell 命令行开关Get Item 如果应用于文件 则返回System IO FileInfo type PS C gt item get item c windows System32 atl dll PS C gt ite
  • 在 Perl 中实现 CLI 工具的最佳实践是什么?

    我正在使用 Perl 实现 CLI 工具 我们可以遵循哪些最佳实践 作为前言 我花了 3 年时间为一家大型金融公司设计并实现了一个相当复杂的 Perl 命令行工具集 以下想法基本上是我们团队设计指南的一部分 用户界面 命令行选项 允许尽可能

随机推荐

  • aspx 和 aspx.cs 文件之间的链接断开

    在重命名不同的 ASPX 页面后 我曾多次遇到同样的问题 令我惊讶的是我在 stackoverflow 上找不到其他人也有同样的问题 当我运行 ASP NET C 项目时 调试器会向我显示一条类似这样的消息 Error 5 The name
  • 使用scrapy提取XHR请求?

    我正在尝试抓取使用 javascript 生成的社交点赞计数 如果我绝对引用 XHR url 我就能够抓取所需的数据 但是我尝试抓取的网站动态生成这些 XMLHttpRequest 其中包含我不知道如何提取的查询字符串参数 例如 您可以看到
  • 具有更新队列和输出队列的 Python 多处理

    如何编写使用两个队列的 Python 多进程脚本 一个作为工作队列 以一些数据开始 并且根据要并行化的函数的条件 动态接收更多任务 另一个收集结果并用于在处理完成后写下结果 我基本上需要根据我在初始项目中发现的内容在工作队列中放入更多任务
  • C中使用的括号及其用途

    如果之前有人问过这个问题 我很抱歉 但我是 C 的初学者 我想知道是否有人可以帮助解释一下 下面的代码中的括号 我从在线教程中获取了它 它运行得很好 但有一部分我不明白 include
  • SingleProducerConstrained 和 MaxDegreeOfParallelism

    在 C TPL 数据流库中 SingleProducerConstrained 是 ActionBlocks 的优化选项 当只有单个线程提供操作块时可以使用 如果一个区块只会被一个生产者在某个时间点使用 time 这意味着一次只有一个线程会
  • iText:PdfTable单元格垂直对齐

    我正在尝试将标题单元格文本垂直对齐到单元格高度的中间 这是我的代码 PdfPCell c1 new PdfPCell cerate phrase regular bold c1 setHorizontalAlignment Element
  • Open GL 对于 2d 卡牌游戏来说太过分了吗?

    我只是有一个创建纸牌游戏的想法 我只是在考虑是否使用 OpenGl 还是 CoreAnimation 你能告诉我使用 OpenGL 来制作 2D 纸牌游戏是否有点过分了 谢谢 在不了解更多情况的情况下很难说 不过 您可以使用 CALayer
  • 使用 Python 客户端 API 在 Google Cloud Pub/Sub 中运行同步拉取

    我找不到立即返回Python 客户端 API 中的标志 有什么具体原因吗 是否有另一种方法可以从 Python 中的订阅中同步提取排队消息 谷歌不提供这样的东西 但是您可以通过实现自己的队列轻松解决这个问题 from Queue impor
  • Nuxt js - SSR页面重复组件

    我正在生成一个带有组件列表的简单静态页面 当我从另一个页面访问该页面时 它会正确呈现所有内容 当我直接登陆页面时 某些组件会在页脚之后再次呈现 如果我检查该元素 我可以看到它们是相同的元素 但在页脚之后再次呈现 任何人都知道为什么会发生这种
  • 仅保存 Outlook 邮件项目的真实附件

    我目前正在开发一个 Outlook 插件 它将邮件项目和附件保存在我的 MSSQL 数据库中 我有一个方法可以保存 MailItem 及其所有附件 但是 如果我保存所有附件 则 MailItem 中的嵌入图像也会保存 有谁知道如何拯救所有r
  • 使用JPA2时如何对EJB进行单元测试?

    您将如何对使用 JPA 的 EJB 进行单元测试 例如 如果我有一个 Order 实体和 OrderEJB 它应该计算订单总数 如下定义 我将如何在不接触数据库的情况下对 EJB 进行单元测试 另外 您将如何定义实体的值 以便可以断言预期的
  • 如何在 MPMoviePlayerController 中显示字幕

    我构建了一个自定义视频播放器 所有按钮都可以使用 我需要知道当视频具有该选项时 MPMoviePlayerController 显示字幕的代码是什么 我没有在任何地方找到示例或知道该字幕按钮背后的代码的人 我在哪里可以找到这个 您将必须实现
  • Eclipse 找不到我的 Android 4.1.2 设备

    我正在尝试仅运行介绍 Hello World 我的手机 Droid Razr Maxx 上的应用程序正在使用 Eclipse 运行 android 4 1 2 jelly bean 我启用了 USB 调试 尝试更新手机驱动程序 重新安装驱动
  • 如何在 Python (2.6) 中将 JSON 解码为 str 而不是 unicode? [复制]

    这个问题在这里已经有答案了 我有一个 JSON 格式的配置文件 其中包含一些字符串变量 始终为 ascii 这些字符串默认解码为 un icode 但由于我必须将这些变量传递给我的 Python C 扩展 所以我需要它们作为普通的 Pyth
  • 我可以在 Javascript 中抛出异常来停止 Javascript 执行吗?

    我尝试模拟一个问题 从外部 url 加载的脚本会停止执行我的网站上的任何其他脚本 我尝试通过调用不退出的函数来模拟这样的问题 我可以在 firebug 中看到错误 但页面上的不同脚本仍然执行 JavaScript 中是否存在不同类型的错误
  • 8086 汇编中的大二进制移位?

    我有一个 512 字节长的二进制数据块 我想知道如果我想将其右移一次 最有效的方法是什么 我现在最好的猜测 对于汇编来说非常新 是我必须首先检查一个块 可能是 int 看看它将移出什么 移出 然后携带先前 int 移出的任何内容并继续携带这
  • Java:如何计算从InputStream读取的字节数而不事先分配完整内存

    我有一个 Java 后端 用户可以将文件上传到其中 我想将这些上传的文件限制为最大大小 并希望在上传时检查上传的字节数 并在达到限制后立即中断传输 目前 我在分配之前使用 InputStream available 来确定估计大小 但这似乎
  • 在 Elixir 中引用管道值

    我想计算字符串中单词出现的次数 实现是有问题的 但让我们用它来演示我的问题 def count sentence do words String split sentence occurrences Enum map words fn w
  • python read() 从 stdout 比逐行读取慢得多(啜饮?)

    我有一个 python SubProcess 调用 它运行一个可执行文件并将输出通过管道传输到我的子进程标准输出 在 stdout 数据相对较小 约 2k 行 的情况下 逐行读取和作为块读取 stdout read 之间的性能相当 其中 s
  • 使用 Select-String 在 powershell 中检查两个 .txt 文件

    我对编写 powershell 脚本完全陌生 到目前为止 我使用普通批次来达到我的目的 因为这是我公司的要求 在此批处理中 我使用嵌套的 foo 循环来比较两个 txt 文件 具体来说 我想要执行以下操作 文件 1 包含大量字符串 每个字符