首页 > 解决方案 > 使用包含 x 列的 3 个文件中的数据我需要在列帐户中输出数据

问题描述

我有 3 个 txt 文件,即 file1 、 file2 、 file3 包含用“|”分隔的数据 我需要过滤所有在 columnx 中只有“1”的行,并在“account”列中打印值

文件1.txt

  line|account|column3|columnx
  line1|111111|jahadkadaldabndal|1
  line2|2323413341|adajkadadbjkqqweq|0
  line3|21122|adaieaqelqq|0
  line4|236521|jadad|1

文件2.txt

  line|account|column3|columnx
  line1|1117831|jahadkadaldabndal|1
  line2|23234178841|adajkadadbjkqqweq|1
  line3|21122|adaieaqelqq|0
  line4|236526|jadad|1

文件 3.txt

  line|account|column3|columnx
  line1|1113333|jahadkadaldabndal|1
  line2|232341335|adajkadadbjkqqweq|1
  line3|21124|adaieaqelqq|1
  line4|236523|jadad|1

输出应该是这样的:

 111111
 236521
 1113333
 236523
 21124
 232341335
 1117831
 23234178841
 236526

我有一个代码,但只有一个文件 txt 在线。

    powershell -nop -c "(import-csv .\*.txt -del '|'|? columnx -eq 1).account"

我仍在弄清楚我应该使用什么我在这方面真的很新,任何人都可以教我或给我一些代码,以便我可以完成这个谢谢。

标签: powershellbatch-filebatch-processing

解决方案


好吧,您的 powershell 命令几乎就在那里,您只需要一个foreach-loop。

这里打印出任何account值,其中columnx1

Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|'} | Where-Object {$_.columnx -eq 1} | Select-Object -ExpandProperty account

请注意,这%只是循环的每个对象的别名foreach$_因此每个对象都.csv赋予它。


要跟进评论中的问题:

如果我的 txt 文件没有标题怎么办?

Import-Csv有一个-Header选项可让您为导入添加标头,在您的情况下,它应该如下所示:

Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|' -Header "line","account","column3","columnx"} | Where-Object {$_.columnx -eq 1} | Select-Object -ExpandProperty account

如果我需要最后两列的值为“1”怎么办

Where-Object您可以像这样向using添加额外的检查-and

Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|'} | Where-Object {$_.columnx -eq 1 -and $_.column3 -eq 1} | Select-Object -ExpandProperty account

推荐阅读