我一直在努力调整这个问题的答案:powershell - concatenate N text files and prepend filename to each line
我想要的输出基于2个.txt文件的示例:
First.txt
的线
数据
Second.txt
更多行
的
数据
Output.txt的
第1行
First2数据
第二行1
第二期
第二个数据
基于最相似的问题,我可以找到以下答案:
Select-String '^' *.txt >output.txt
会给:
C:\ A \ Filepath \ First.txt:1:行
C:\ A \文件路径\ First.txt:2:数据
C:\ A \ Filepath \ Second.txt:1:更多行
C:\ A \文件路径\ Second.txt:2:的
C:\ A \文件路径\ Second.txt:3:数据
所以我希望使用-replace来删除文件路径,保留文件名(但删除.txt :),保留行号(但用空格替换final:)并保留行中的文本。
任何帮助将不胜感激达到所需的output.txt。感谢
答案 0 :(得分:1)
不漂亮,但这是一种方法。
Get-ChildItem *.txt |
%{$FILENAME=$_.BaseName;$COUNT=1;get-content $_ |
%{"$FILENAME"+"$COUNT"+" " + "$_";$COUNT++}}|
Out-File Output.txt
答案 1 :(得分:1)
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-String仍可使用
您只需要操纵输出以匹配您想要的输出。使用Get-Member
,我们可以检查select-string
返回的属性以获得所需的输出。
Select-String '^' "c:\temp\*.txt" | ForEach-Object{
"{0}{1} {2}" -f $_.Filename,$_.LineNumber,$_.Line
} | Add-Content "C:\temp\output.txt"