如何在powershell中打印出文件每行的第二个单词?

czq61nw1  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(113)

例如:sample.txt包含:

John Doe data
Jane Doe data

输出将为:

Doe
Doe

我试过(Get-Content sample.txt).Split(' ')[1],但它不起作用,因为它只打印第一行的第二个单词(数组的第二个元素)。
输出量:

Doe
rxztt3cl

rxztt3cl1#

您需要在Get-Content读取的每一行 * 上调用.Split()(以及结果中的索引)*,例如使用内部.ForEach()方法:

(Get-Content sample.txt).ForEach({ $_.Split(' ')[1] })

如果在一行中有 * 多个 * 空格分隔单词,则可以改用PowerShell的-split * 运算符 * 的一元形式:

(Get-Content sample.txt).ForEach({ (-split $_)[1] })

使用管道和ForEach-Objectcmdlet 的流替代方法:

Get-Content sample.txt | ForEach-Object { $_.Split(' ')[1] }

至于你试过什么

(Get-Content sample.txt).Split(' ')[1]
  • 由于member-access enumeration.Split()调用被应用于Get-Content返回的行数组的 * 每一行 *。
  • 每个.Split()调用依次返回一个数组。
  • 成员访问枚举将这些数组 * 连接 * 起来,形成一个单一的平面数组,其中包含所有行中的单词。
  • 然后,[1]索引只被应用 * 一次 *,即应用到这个平面数组,并且只返回它的第二个元素(只返回 first 行的第二个单词)。

相关问题