使用包含列 x 的 3 个文件中的数据,我需要输出列帐户中的数据
Using the data in 3 files containing column x I need to output the data in column account
我有 3 个 txt 文件,即 file1 、 file2 、 file3 ,其中包含用“|”分隔的数据
我需要过滤所有在 columnx 中只有“1”的行,并在 "account"
列中打印值
file1.txt
line|account|column3|columnx
line1|111111|jahadkadaldabndal|1
line2|2323413341|adajkadadbjkqqweq|0
line3|21122|adaieaqelqq|0
line4|236521|jadad|1
file2.txt
line|account|column3|columnx
line1|1117831|jahadkadaldabndal|1
line2|23234178841|adajkadadbjkqqweq|1
line3|21122|adaieaqelqq|0
line4|236526|jadad|1
file3.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"
我还在想我应该用什么我在这方面真的很新,谁能教我或给我一些代码,这样我就可以完成这个了,谢谢。
因为您还提供了 batch-file
标签:
@echo off
for /f "tokens=2 delims=|" %%a in ('type file*.txt 2^>nul ^|findstr /e "|1"') do (
echo %%a|findstr /x "[0-9][0-9]*"
)
从以 |1
结尾的每一行中获取第二个标记,并将其过滤为 "numbers only"
@echo off
for %%A in (*.txt) do for /F "usebackq skip=1 tokens=2,4 delims=|" %%A in ("%%~A") do (
for %%B in (%%B) do if %%B EQU 1 echo %%A
)
pause
for %%A in (*.txt)
遍历每个文本文件。可以适当设置通配符,例如file*.txt
或适合您情况的任何内容。
for /F "usebackq skip=1 tokens=2,4 delims=|"
读取由 parent FOR
传递的每个文件,逐行处理每个文件从每行中获取标记 2 和 4(即 account 和 columnx) . skip=1
如果文件包含 header 则跳过第一行 line|account|column3|columnx
如果不删除 skip=1
for %%B in (%%B)
是从最后一个标记(columnx)中删除任何 leading/trailing 空格,以便与 1
进行比较,如果最后一列包含空格则正确。
好吧,您的 powershell 命令已经快完成了,您只需要一个 foreach
循环。
此处打印出任何 account
值,其中 columnx
为 1
:
Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|'} | Where-Object {$_.columnx -eq 1} | Select-Object -ExpandProperty account
请注意 %
只是 foreach
的别名,而 $_
等于循环中的每个 object,因此每个 .csv
都给它。
要跟进评论中的问题:
如果我的txt文件没有header怎么办?
Import-Csv
有一个 -Header
选项,可以让您为导入添加 Headers,在您的情况下它应该如下所示:
Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|' -Header "line","account","column3","columnx"} | Where-Object {$_.columnx -eq 1} | Select-Object -ExpandProperty account
如果我需要最后两列的值为“1”怎么办
您可以像这样使用 -and
向 Where-Object
添加额外的检查:
Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|'} | Where-Object {$_.columnx -eq 1 -and $_.column3 -eq 1} | Select-Object -ExpandProperty account
我有 3 个 txt 文件,即 file1 、 file2 、 file3 ,其中包含用“|”分隔的数据 我需要过滤所有在 columnx 中只有“1”的行,并在 "account"
列中打印值file1.txt
line|account|column3|columnx
line1|111111|jahadkadaldabndal|1
line2|2323413341|adajkadadbjkqqweq|0
line3|21122|adaieaqelqq|0
line4|236521|jadad|1
file2.txt
line|account|column3|columnx
line1|1117831|jahadkadaldabndal|1
line2|23234178841|adajkadadbjkqqweq|1
line3|21122|adaieaqelqq|0
line4|236526|jadad|1
file3.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"
我还在想我应该用什么我在这方面真的很新,谁能教我或给我一些代码,这样我就可以完成这个了,谢谢。
因为您还提供了 batch-file
标签:
@echo off
for /f "tokens=2 delims=|" %%a in ('type file*.txt 2^>nul ^|findstr /e "|1"') do (
echo %%a|findstr /x "[0-9][0-9]*"
)
从以 |1
结尾的每一行中获取第二个标记,并将其过滤为 "numbers only"
@echo off
for %%A in (*.txt) do for /F "usebackq skip=1 tokens=2,4 delims=|" %%A in ("%%~A") do (
for %%B in (%%B) do if %%B EQU 1 echo %%A
)
pause
for %%A in (*.txt)
遍历每个文本文件。可以适当设置通配符,例如file*.txt
或适合您情况的任何内容。
for /F "usebackq skip=1 tokens=2,4 delims=|"
读取由 parent FOR
传递的每个文件,逐行处理每个文件从每行中获取标记 2 和 4(即 account 和 columnx) . skip=1
如果文件包含 header 则跳过第一行 line|account|column3|columnx
如果不删除 skip=1
for %%B in (%%B)
是从最后一个标记(columnx)中删除任何 leading/trailing 空格,以便与 1
进行比较,如果最后一列包含空格则正确。
好吧,您的 powershell 命令已经快完成了,您只需要一个 foreach
循环。
此处打印出任何 account
值,其中 columnx
为 1
:
Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|'} | Where-Object {$_.columnx -eq 1} | Select-Object -ExpandProperty account
请注意 %
只是 foreach
的别名,而 $_
等于循环中的每个 object,因此每个 .csv
都给它。
要跟进评论中的问题:
如果我的txt文件没有header怎么办?
Import-Csv
有一个 -Header
选项,可以让您为导入添加 Headers,在您的情况下它应该如下所示:
Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|' -Header "line","account","column3","columnx"} | Where-Object {$_.columnx -eq 1} | Select-Object -ExpandProperty account
如果我需要最后两列的值为“1”怎么办
您可以像这样使用 -and
向 Where-Object
添加额外的检查:
Get-ChildItem -Filter "*.txt" | % {Import-Csv $_.Fullname -Delimiter '|'} | Where-Object {$_.columnx -eq 1 -and $_.column3 -eq 1} | Select-Object -ExpandProperty account