我想这是一个非常简单的命令,但我对 Ubuntu 真的很陌生。我基本上想命令 ubuntu 查看具有特定后缀的文件(QC.fastq.log),然后查看括号中第 3 行的值,然后如果该值高于 0.1,则完成另一个命令。
所以我有这个
for file in *QC.fastq.log
Do
If [ -e $file ] # this is where I thing the line and bracket command should be
then
the next command
有任何想法吗?
示例文件:
6882 reads; of these:
6882 (100.00%) were unpaired; of these:
1088 (15.81%) aligned 0 times
5792 (84.16%) aligned exactly 1 time
2 (0.03%) aligned >1 times
84.19% overall alignment rate
答案1
这些要求相当严格!
如果你能应付匹配大于 0.09 的任何内容,那么这应该可行:
find -name '*QC.fastq.log' -exec sh -c 'sed -n 3p {} && grep -q \(0.0 || echo "DO SOMETHING"' \;
- 对于任何与 glob 匹配的文件
- 使用
sed
- 如果不
||
匹配(0.0
(即永远小于 0.1), - 运行命令。
答案2
下面是完成这个工作的一个小 shell 脚本:
filemask="*QC.fastq.log"
while read -r -d $'\0' file
do
if [ "$(echo "$(sed -nr "3s/^.*\((.*)%\).*$/\1/p}" "${file}") > 0.1" | bc)" = "1" ]
then
echo "${file}" is greater 0.1
fi
done < <(find . -name "${filemask}" -print0)