bash에서 모든 하위 디렉터리를 읽고 해당 파일을 만드는 방법은 무엇입니까?

bash에서 모든 하위 디렉터리를 읽고 해당 파일을 만드는 방법은 무엇입니까?

A두 개의 주요 디렉토리, 즉 및 가 있습니다 B. 각 디렉터리에는 무작위로 이름이 지정된 100개의 하위 디렉터리(a1,a2,.. 및 b1,b2,...)가 포함되어 있습니다. 이러한 하위 디렉터리에는 XY특정 유형의 파일이 포함되어 있습니다. X특정 하위 디렉토리에 대한 값은 동일 a1하지만 b1Y이 다릅니다. 이제 간단한 명령 등을 사용하여 하위 디렉터리 열 간의 차이점 XYY포함하는 유형 파일을 만들 수 있습니다 . 하지만 bash 루프를 사용하여 모든 하위 디렉터리에 대해 이 작업을 수행하는 방법을 모르겠습니다. 각 디렉토리에 유형 파일이 포함되고 유형 파일이 디렉토리 1, 디렉토리 2,.., 디렉토리 100 에 포함되는 디렉토리 1, 2,..을 생성하는 필수 스크립트가 필요합니다 . 저는 bash를 처음 접했기 때문에 사소한 질문에 대해 사과드립니다.YY = Y1(a1) - Y2(b1)awkXYXYX Y(a1-b1)X Y(a2-b2)X Y(a100-b100)

예시는 다음과 같습니다. 두 개의 홈 디렉토리가 있고 A. 하위 디렉토리가 있고 하위 디렉토리가 있습니다 .BA0.3427/ 0.3514/ 0.3543/ 0.3792/...B0.4011/ 0.4014/ 0.4031/ 0.4357/...

0.3427/하위 디렉터리에는 A데이터 파일이 포함되어 있습니다.

0.00 -8.79583
50.00 -8.79621
100.00 -8.79961
150.00 -8.80721
200.00 -8.81845
250.00 -8.83271
300.00 -8.8495

하위 디렉터리 0.4011 에는 데이터 파일이 포함되어 있습니다.

0.00 -8.78888
50.00 -8.78954
100.00 -8.79458
150.00 -8.80459
200.00 -8.81852
250.00 -8.83561
300.00 -8.85529

이제 다음 데이터를 포함하는 파일이 디렉터리에 있어야 합니다 1.data.dat

0.00 0.00695
50.00 0.00667
100.00 0.00503
150.00 0.00262
200.00 -7e-05
250.00 -0.0029
300.00 -0.00579

이 필수 파일은 의 첫 번째 하위 디렉터리 열의 차이 data.dat일 뿐이며 명령을 사용하여 생성할 수 있습니다. Y이제 및 에 있는 다른 모든 하위 디렉터리에 대해 동일한 작업을 수행하고 싶습니다. 파일의 디렉토리 위치에 of 및 of와 같은 열의 차이가 포함되어야 합니다.ABawk/pasteAB2data.datY0.3514/A0.4014/B

답변1

이 시도.

#!/bin/bash

# Run it in the folder containing dir A and dir B.

A=A #first dir, replace with the propper name
B=B #second dir, replace with the propper name
in_file=f #replace with propper name
out_file=data.dat

B_subs=( $(ls B | sort -n) )

i=0
cd "$A"
for d in $( ls | sort -n) ; do
    a="$d"/"$in_file"
    b=../"$B"/"${B_subs[$i]}"/"$in_file"
    ((i++))
    mkdir ../"$i"
    # the one below is not correct, but gives your results
    # join "$a" "$b" | awk '{print $1, $3-$2}' > ../"$i"/"$out_file"
    # the one below is correct
    join "$a" "$b" | awk '{print $1, $2-$3}' > ../"$i"/"$out_file"
done

관련 정보