내 디렉터리에 동일한 확장명(.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
"평균 밀도" 값의 범위를 지정하고 해당 범위 내의 "평균 밀도" 값이 포함된 선택된 파일을 새 디렉터리에 복사할 수 있는 스크립트를 찾고 있습니다.
참고: 헤더는 IMOD 이미지 처리 패키지에 포함된 프로그램입니다. "헤더" 기능에 대한 자세한 내용을 보려면 다음 사이트를 방문하세요.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
.