我正在为我的一位教授做一个项目,他让我根据他们的头文件(特别是他们的图像是什么星星)对几百个.fits图像进行排序。我认为grep将是最好的方式这样做但我无法根据标题找出如何使用grep。
我正在进入:
ls | imhead *.fits | grep -E -r "PG\ 1104+243" *
暂时将它们列出来,一旦列出,我知道如何将它们复制到目录中。
我是使用grep的新手,所以我不确定我的错误在哪里?任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
假设imghead
将.fits
的标头解压缩为txt,您可以使用简单的shell脚本来执行此操作:
script.sh
#!/bin/bash
grep "$1" "$2" > /dev/null 2>&1 && echo "$2"
请注意,如果您使用扩展正则表达式,+
是一个特殊字符,这意味着如果您在问题中传递-E
。没有任何选项的简单grep应该可以解决这个问题。
使用find
在当前文件夹中的每个*.fits
文件上执行脚本:
find -maxdepth 1 -name '*.fits' -exec ./script.sh 'PG 1104+243' {} \;
答案 1 :(得分:0)
如果您要复制/移动/更改或对您找到的文件执行某些操作,那么在复杂性和引用方便性方面,使用这样的循环可能会更好:
#!/bin/bash
find . -name \*.fits -print0 | while read -d '' -r file; do
echo Checking file: $file
imhead "$file" | grep -q 'PG 1104+243'
if [ $? -eq 0 ]; then
echo Object matches: $file
fi
done