我的目录中有多个具有相同扩展名 (.mrc) 的图像文件。在终端中,如果我这样做, header ,它会给出以下输出:
RO image file on unit 1 : FoilHole_17224697_Data_18256098_18256099_20150819_2015.mrc Size= 65537 K
This file has invalid axis indices, adjusting them to 1,2,3
Number of columns, rows, sections ..... 4096 4096 1
Map mode .............................. 2 (32-bit real)
Start cols, rows, sects, grid x,y,z ... 0 0 0 4096 4096 1
Pixel spacing (Angstroms).............. 1.000 1.000 1.000
Cell angles ........................... 0.000 0.000 0.000
Fast, medium, slow axes ............... X X X
Origin on x,y,z ....................... 0.000 0.000 0.000
Minimum density ....................... 2056.0
Maximum density ....................... 4462.0
Mean density .......................... 3213.5
tilt angles (original,current) ........ 0.0 0.0 0.0 0.0 0.0 0.0
Space group,# extra bytes,idtype,lens . 0 0 0 0
1 Titles :
EMAN 9/18/2015 15:41
我正在寻找一个脚本,可以在其中指定“平均密度”值的范围,并将包含该范围内“平均密度”值的选定文件复制到新目录。
注意:Header 是 IMOD 图像处理包中的一个程序。有关“header”功能的更多信息,请访问:http://bio3d.colorado.edu/imod/doc/program_listing.html#TOP
答案1
除非您有专用工具来列出有关 .mrc 文件的信息,否则我建议您使用一些具有打包/解包功能并且可以处理浮点值的脚本语言,例如 perl。如果您刚刚打印的输出是命令的输出,那么您可以在 for 循环上执行 grep :
$!/bin/sh
treshold=42.0
for file in *.mrc
do
mean_density=$(header $file | grep "Mean density" | awk '{print $2}')
if [ $(echo "$mean_density>$treshold" | bc) -eq 1 ]
then
echo "$i match!"
fi
done
编辑,
假设“header”命令将以您在问题中引用的格式打印 .mrc 文件的标题。如果您没有这样的程序,那么 perl unpack 功能绝对是您所需要的。
答案2
如果您要查找的范围类似于 3,000 - 3,999,则该命令
grep -L -E "^Mean density \.+ 3\d\d\d(\.\d+)?$" *.mrc
应该打印具有您要查找的平均密度的文件列表。更复杂的正则表达式是可能的。或者,如果您需要运行header
以获得人类可读的形式,您可以将输出通过管道传递到egrep
并测试返回值for f in *.mrc
。