如何在bash中读取所有子目录并创建相应文件?

如何在bash中读取所有子目录并创建相应文件?

我有两个主要目录,即AB。每个目录包含 100 个随机名称的子目录(a1,a2,.. 和 b1,b2,...)。这些子目录包含一个XY类型的文件。X对于特定的子目录来说,该值是相同的a1b1但该Y值是不同的。我现在可以创建一个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 中,所以对任何琐碎的问题表示歉意。

示意性示例可以是这样的:我有两个主目录ABA有子目录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等列的差异。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

相关内容