我有大量的目录,它们的名称为:
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 }'