从多个文件中获取第 9 列数据并将其全部转储到新文件中

从多个文件中获取第 9 列数据并将其全部转储到新文件中

好的伙计们,我有 24 个子文件夹,分别命名为 Angle1、Angle2 等,直到 Angle24,每个子文件夹都有一个名为 output.txt 的文件。请注意,这些文件夹包含我想忽略的子文件夹。

有没有办法循环遍历这些文件夹并获取第 9 列数据(不是按字符获取第 9 列,数据可以有几个字符长,但每列之间用空格分隔)。并将所有 output.txt 文件中的每个第 9 列放入父目录中名为 total.txt 的新文件中?因此,我最终将生成一个名为 total.txt 的文件,其中包含 24 列数据,其中第一列对应于 Angle1 中 output.txt 的第 9 列,等等。

我需要在 powershell 中完成此操作。

答案1

powershell 命令行,创建目录,运行D:\Data Set\

powershell 1..24^|%{md ('Angle'+$_)}

powershell命令行,创建测试数据:

powershell $i=0;$d='D:\Data Set\';$r=New-Object -T Random;1..24^|%{++$i;1..(random(11..17))^|%{$s='';1..20^|%{$rn=$r.Next();$s+=''+$rn+' '};$s.Trim();$s^|ac ($d+'Angle'+$i+'\output.txt')}}
  • $r=New-Object -T Random – 创建随机对象
  • $s.Trim() - 删除字符串左侧和右侧的空格

运行 powershell 文件:

powershell .\PasteD.ps1

PasteD.ps1,获取并写入列:

$d='D:\Data Set\' # work directory
$FileNum=24       # part path and filename
$Coln=9           # - 9th column
$LineMax=0        # init variable maximum line at text file
$dlm=' '          # delimiter

$i=0;1..$FileNum|%{++$i;$LineMax=[Math]::Max($LineMax,(gc ($d+'Angle'+$i+'\output.txt')|Measure).Count)}
# (gc <file name>|Measure).Count) - get line count at text file
# [Math]::Max - get Maximum line count at all file
# 1..$FileNum - cycle at Angle1, Angle2, etc up to Angle24 directory

# way init array: 

#$arS =,''*$LineMax
#$arS =@('')*$LineMax
#$arS=[array]::CreateInstance('String', $LineMax)
#$arS=New-Object 'object[]' $LineMax
[string[]]$arS=@('')*$LineMax

For($i=0; $i -lt $FileNum-1; $i++) {
$f=gc ($d+'Angle'+($i+1)+'\output.txt') # get content file in Angle1..Angle23 dir

  For($j=0; $j -lt $f.length; $j++) {
  $arS[$j]=$arS[$j] + ($f[$j]-split' ')[$Coln-1] + $dlm # add value and delimiter
  }
  For($j=$f.length; $j -lt $LineMax; $j++) {
  $arS[$j]=$arS[$j] + $dlm # add delimiter and empty value
  }
}

$f=gc ($d+'Angle'+($FileNum)+'\output.txt') # get content file in Angle24 dir

  For($j=0; $j -lt $f.length; $j++) {
  $arS[$j]=$arS[$j] + ($f[$j]-split' ')[$Coln-1] # after last column not add delimiter
  }

$arS|ac($d+'\total.txt') # save string array to result file

相关内容