合并文本文件并添加文件名和行号 - Powershell
Merge Text Files and Prepend Filename and Line Number - Powershell
我一直在尝试调整这个问题的答案:powershell - concatenate N text files and prepend filename to each line
基于 2 个 .txt 文件的示例我想要的输出:
First.txt
行
数据
Second.txt
更多行
的
数据
Output.txt
前1行
第2条数据
第二1行
第 2 个
第3条数据
根据最相似的问题我可以找到以下答案:
Select-String '^' *.txt >output.txt
会给:
C:\A\Filepath\First.txt:1:行
C:\A\Filepath\First.txt:2:数据
C:\A\Filepath\Second.txt:1:更多行
C:\A\Filepath\Second.txt:2:的
C:\A\Filepath\Second.txt:3:数据
所以我希望使用 -replace 来删除文件路径,保留文件名(但删除 .txt:),保留行号(但用 space 替换最后的 :)并保留行中的文本。
如能提供帮助,我们将不胜感激 output.txt。谢谢
不漂亮,但这是一种方法。
Get-ChildItem *.txt |
%{$FILENAME=$_.BaseName;$COUNT=1;get-content $_ |
%{"$FILENAME"+"$COUNT"+" " + "$_";$COUNT++}}|
Out-File Output.txt
select-string
方法非常有趣。我将采用的方法是使用 Get-Content
。这样做的好处是每一行都有一个 readcount
属性 代表行号。
Get-ChildItem "C:\temp\*.file" | ForEach-Object{
$fileName = $_.BaseName
Get-content $_ | ForEach-Object{
"{0}{1} {2}" -f $fileName,$_.ReadCount,$_
}
} | Add-Content "C:\temp\output.txt"
获取每个文件并使用Get-Content
。对于我们处理的每一行,我们都会向输出流发送与您所需输出匹配的格式化行。无需计算行数,因为 $_.ReadCount
已经知道。
Select-字符串仍然有效
你只需要操纵输出来匹配你想要的。使用 Get-Member
我们可以检查 select-string
returns 的属性以获得我们想要的输出。
Select-String '^' "c:\temp\*.txt" | ForEach-Object{
"{0}{1} {2}" -f $_.Filename,$_.LineNumber,$_.Line
} | Add-Content "C:\temp\output.txt"
我一直在尝试调整这个问题的答案:powershell - concatenate N text files and prepend filename to each line
基于 2 个 .txt 文件的示例我想要的输出:
First.txt
行
数据
Second.txt
更多行
的
数据
Output.txt
前1行
第2条数据
第二1行
第 2 个
第3条数据
根据最相似的问题我可以找到以下答案:
Select-String '^' *.txt >output.txt
会给:
C:\A\Filepath\First.txt:1:行
C:\A\Filepath\First.txt:2:数据
C:\A\Filepath\Second.txt:1:更多行
C:\A\Filepath\Second.txt:2:的
C:\A\Filepath\Second.txt:3:数据
所以我希望使用 -replace 来删除文件路径,保留文件名(但删除 .txt:),保留行号(但用 space 替换最后的 :)并保留行中的文本。
如能提供帮助,我们将不胜感激 output.txt。谢谢
不漂亮,但这是一种方法。
Get-ChildItem *.txt |
%{$FILENAME=$_.BaseName;$COUNT=1;get-content $_ |
%{"$FILENAME"+"$COUNT"+" " + "$_";$COUNT++}}|
Out-File Output.txt
select-string
方法非常有趣。我将采用的方法是使用 Get-Content
。这样做的好处是每一行都有一个 readcount
属性 代表行号。
Get-ChildItem "C:\temp\*.file" | ForEach-Object{
$fileName = $_.BaseName
Get-content $_ | ForEach-Object{
"{0}{1} {2}" -f $fileName,$_.ReadCount,$_
}
} | Add-Content "C:\temp\output.txt"
获取每个文件并使用Get-Content
。对于我们处理的每一行,我们都会向输出流发送与您所需输出匹配的格式化行。无需计算行数,因为 $_.ReadCount
已经知道。
Select-字符串仍然有效
你只需要操纵输出来匹配你想要的。使用 Get-Member
我们可以检查 select-string
returns 的属性以获得我们想要的输出。
Select-String '^' "c:\temp\*.txt" | ForEach-Object{
"{0}{1} {2}" -f $_.Filename,$_.LineNumber,$_.Line
} | Add-Content "C:\temp\output.txt"