Bash脚本shell:如何使用文件名对应的变量嵌套for循环



我有大量的目录,它们的名称为:

Cl_GG_Omega_m_step_1e-01_der_15
Cl_GG_Omega_m_step_2e-01_der_15
Cl_GG_Omega_m_step_2e-01_der_15
Cl_GG_Omega_m_step_1e-08_der_15
Cl_LL_Omega_m_step_1e-08_der_15
Cl_GL_Omega_m_step_1e-08_der_15
Cl_GG_Omega_m_step_1.1229481712787273e-08_der_15
Cl_LL_Omega_m_step_1.1229481712787273e-08_der_15
Cl_GL_Omega_m_step_1.1229481712787273e-08_der_15
Cl_GG_Omega_m_step_1.2610125953782405e-08_der_15
Cl_LL_Omega_m_step_1.2610125953782405e-08_der_15

我想获得目录名(完整(,其值出现在Òmega_m_step_der_15之间,低于截止值(例如下面的cutoff=0.01(:

为此,我尝试做:

for i in $(ls --color=never -d Cl_*Omega_m_step_*); do
for j in $(echo $i); do
sed 's/.*_step_([0-9].[0-9]*)_der_15/1/g' "$j" | awk -v cutoff=0.01 '{if ($1 < cutoff) print "$j"}'; 
done;
done

这里的困难是我想获得整个目录名,这就是为什么我使用双for循环:问题是我不知道如何进入嵌套循环$j目录名(来自for j in $(echo $i),尤其是从awk -v cutoff=0.01 '{if ($1 < cutoff) print "$j"}'命令打印它?

更新

谢谢你的回答,这对我帮助很大。最后一件事,为了好玩,我如何与Shell bash一起使用(我的意思是我引用了(外部索引$I到双循环的嵌套循环中,即:

for i in $(...); do for j in $(...); do "reference to i"; done; done

我可以做一个简单的$i还是"$i"?当然,您会告诉我,这将取决于在嵌套循环中使用此索引的命令。所以,即使是一个简单的案例对我来说也足够了

如注释所示,文件名可以分解为'_'分隔的标记,包括step属性(第6列(。Awk可用于应用数字过滤器。

ls Cl_*Omega_m_step_* | awk -F_ '$6<0.01'

根据OP问题,对awk程序进行澄清:以下内容等效。

condition 
condition { print }
{ if ( condition ) print }

例如:

awk -F_ '$6<0.01'
awk -F_ '$6<0.01 { print }'
awk -F_ '{ if ($6<0.01) print }'

最新更新