我有一个非常简单的bash脚本:
#!/bin/bash
echo -n "A: ";
grep -v ">" | grep -o "A" $1 | wc -l;
我输入
./script.sh 1.fasta
我得到了
A: 131
但是,这个过程仍在点击,我的剧本还没有完成。这里有什么问题?
谢谢。
答案 0 :(得分:4)
这是问题命令:
grep -v ">" | grep -o "A" $1 | wc -l;
由于第一个命令grep -v ">"
正在等待来自STDIN的输入,因为您没有提供grep
要搜索的任何文件。
PS:即使grep -o "A" $1
也有问题,因为管道命令会从链中上一个命令的输出中获取输入。
可能你的意思是:
grep -v ">" "$1" | grep -o "A" | wc -l
答案 1 :(得分:2)
您的第一个grep
没有文件参数,因此它将从标准输入中读取:
grep -v ">" | grep -o "A" $1 | wc -l;
(read stdin) (read $1)
您获得131
的原因是因为您的第二个grep
有一个文件参数,因此它会让$1
中的所有行都有{ {1}}。但是仍然等待第一个A
结束(你可以使用CTRL-D)。
你可能想要做的是:
grep
这会在grep -v ">" "$1" | grep -o "A" | wc -l
中找到没有$1
的所有行,然后在中出现>
的所有行,计算它们。