여러 파일에서 9번째 열의 데이터를 가져와서 모두 새 파일에 덤프합니다.

여러 파일에서 9번째 열의 데이터를 가져와서 모두 새 파일에 덤프합니다.

좋아요 여러분, 저는 Angle1, Angle2 등 최대 Angle24라는 이름의 하위 폴더 24개를 갖고 있으며 각 폴더에는 output.txt라는 파일이 있습니다. 이 폴더에는 무시하고 싶은 하위 폴더가 있습니다.

이러한 폴더를 반복하여 데이터의 9번째 열을 가져오는 방법이 있습니까(9번째 열이 문자별로 아님, 데이터 길이는 여러 문자일 수 있지만 각 열은 공백으로 구분됨). 그리고 모든 output.txt 파일의 각 9번째 열을 상위 디렉토리의 total.txt라는 새 파일에 넣으시겠습니까? 따라서 궁극적으로 24개의 데이터 열이 있는 total.txt라는 파일을 만들 것입니다. 여기서 첫 번째 열은 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

관련 정보