A
2つの主なディレクトリ、すなわちとがありますB
。各ディレクトリには、ランダムに名前が付けられた100個のサブディレクトリ(a1、a2、..、b1、b2、...)が含まれています。これらのサブディレクトリにはXY
特定の種類のファイルが含まれています。X
特定のサブディレクトリの値は同じですa1
が、b1
値Y
が異なります。これで、単純なコマンドなどを使用して、サブディレクトリ列間の違いのみをXY
含むY
タイプファイルを作成できます。しかし、bashループを使用してすべてのサブディレクトリに対してこれを行う方法がわかりません。各ディレクトリには、タイプファイルが含まれ、タイプファイルがディレクトリ1、ディレクトリ2、..、およびディレクトリ100に含まれるディレクトリ1、2、..を生成するための必須スクリプトが必要です。私は初めてbashに触れたので、マイナーな質問についてお詫び申し上げます。Y
Y = Y1(a1) - Y2(b1)
awk
XY
XY
X Y(a1-b1)
X Y(a2-b2)
X Y(a100-b100)
例は次のとおりです。 2つのホームディレクトリがありますA
。サブディレクトリがあり、サブディレクトリがあります。B
A
0.3427/ 0.3514/ 0.3543/ 0.3792/...
B
0.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などの列の違いを含める必要があります。A
B
awk/paste
A
B
2
data.dat
Y
0.3514/
A
0.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