使用标题信息对图像文件进行排序

使用标题信息对图像文件进行排序

我的目录中有多个具有相同扩展名 (.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

相关内容