合并文本文件并添加文件名和行号 - 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"