Bash

如何讀取所有子目錄並在bash中創建相應的文件?

  • August 23, 2016

我有兩個主要目錄說,AB. 它們每個都包含 100 個隨機名稱的子目錄(a1,a2,.. 和 b1,b2,…)。這些子目錄包含一個XY類型的文件。X特定子目錄的值相同a1b1Y值不同。我現在可以創建一個XY類型文件,其中只有Y子目錄Y列之間的區別,比如Y = Y1(a1) - Y2(b1)用一個簡單的awk命令左右。但我不知道如何對所有子目錄使用 bash 循環。我想要一個將創建目錄 1、2、.. 的所需腳本,其中每個目錄將包含一個XY類型文件,XY類型文件包含X Y(a1-b1)在目錄 1 中,X Y(a2-b2)在目錄 2 中,..,在目錄X Y(a100-b100)100 中。我是 bash 的新手,所以對任何瑣碎的問題表示歉意。

示意圖範例可以是這樣的:我有兩個主目錄AB. 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第一個子目錄的列的差異AB可以通過awk/paste命令生成。A現在我希望and中存在的所有其他子目錄都一樣B。文件在目錄2中的位置應包含of和of等列data.dat的差異。Y``0.3514/``A``0.4014/``B

試試這個。

#!/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

引用自:https://unix.stackexchange.com/questions/305267