파일 반복 및 데이터 수집

파일 반복 및 데이터 수집

좋아요, 여러분이 도와줄 수 있는 문제가 있습니다.

폴더가 24개 있습니다. Angle1, Angle2, ..., Angle24로 라벨 지정됨

각 폴더에는 출력.txt라는 파일 이름이 있습니다.

output.txt라는 각 파일에서 특정 정보를 가져오고 싶습니다.

숫자가 포함된 10개의 데이터 열이 있지만 숫자는 가변 길이입니다. 숫자의 9번째 열을 원하지만 이것이 문자 기준으로 9번째 열이라는 의미는 아닙니다. 46개의 열이 될 수도 있습니다. 어쨌든 각 열은 공백으로 구분되므로 유용하게 사용할 수 있습니다.

Angle1, Angle2 등을 반복하고 각각에서 9번째 데이터 열을 가져와 총 24개 데이터 열을 total.txt라는 상위 디렉터리의 새 파일에 저장하고 싶습니다.

이것은 불가능할 수도 있지만 단지 궁금할 뿐입니다. 가능할까요?

저는 Windows PowerShell을 사용하고 있지만 더 쉬운 경우 Ubuntu를 사용할 수도 있습니다. 두 환경 모두에서 답변이 작동하지 않을 수 있는 경우 해당 답변이 어떤 환경에 해당하는지 알려주십시오.

답변1

출력 형식 및/또는 일부 집계 함수를 원하는 경우를 지정하지 않지만 하나의 종료 열 파일로 생성할 예제 스크립트는 다음과 같습니다.

for ((i=1;i<25;i++))
do
awk '{print $9}' Angle${i}/output.txt >>total.txt
done

각 파일의 9번째 열을 열로 갖고 싶다면 다음과 같은 스크립트를 사용할 수 있습니다.

awk '{print $9}' Angle1/output.txt >>tmp
for ((i=2;i<25;i++))
do
awk '{print $9}' Angle${i}/output.txt |paste -d " " tmp - >>total.txt
mv total.txt tmp
done
mv tmp total.txt

그러나 이것은 입력 파일에 동일한 수의 행이 있는 경우에만 잘 작동합니다.

이 스크립트는 모든 Bash/Korn 셸에서 실행되며 Linux 및 Cygwin에서 작동합니다.

여기 내 테스트가 있습니다. 소스 파일:

[romeo@localhost tmp]$ cat PKA1/output.txt 
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
[romeo@localhost tmp]$ cat PKA2/output.txt 
3 4 5 6 7 8 9 0 1 2 
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
[romeo@localhost tmp]$ cat PKA3/output.txt 
6 7 8 9 0 1 2 3 4 5
7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7

내 스크립트(내 환경을 나타내도록 편집됨):

[romeo@localhost tmp]$ cat z1
for ((i=1;i<4;i++))
do
awk '{print $9}' PKA${i}/output.txt >>total.txt
done
[romeo@localhost tmp]$ cat z2
awk '{print $9}' PKA1/output.txt >>tmp
for ((i=2;i<4;i++))
do
awk '{print $9}' PKA${i}/output.txt |paste -d " " tmp - >>total.txt
mv total.txt tmp
done
mv tmp total.txt

그리고 내 실행은 다음과 같습니다.

[romeo@localhost tmp]$ rm total.txt 
[romeo@localhost tmp]$ bash z1
[romeo@localhost tmp]$ cat total.txt 
9
0
1
1
2
3
4
5
6
[romeo@localhost tmp]$ rm total.txt 
[romeo@localhost tmp]$ bash z2
[romeo@localhost tmp]$ cat total.txt 
9 1 4
0 2 5
1 3 6

관련 정보