我正在尝试编写一个小的shell脚本,它在.fas文件中搜索模式(字符串)并打印找到模式的行和位置。当我调用shell脚本时,以下代码片段起作用:
#!/bin/bash
awk 's=index($0, "CAATCTCC"){print "line=" NR, "start position=" s}' 100nt_upstream_of_mTSS.fas
$ ./search.sh
当我将脚本更改为:
时awk 's=index($0, "CAATCTCC"){print "line=" NR, "start position=" s}'
并在我的bash中执行以下命令行调用:
$ ./search.sh 100nt_upstream_of_mTSS.fas
“没有”发生(某些东西正在运行,但它需要太长时间并且没有结果出现,所以终止该过程。)
我可能是“屏幕盲”,但我找不到原因,为什么我无法将命令行参数传递给我的脚本。
此外,我想制作我搜索变量的主题(字符串)。我试过这个:
#!/bin/bash
FILE=$1
MOTIF=$2
awk 's=index($0, "$MOTIF"){print "line=" NR, "start position=" s}' "$FILE"
$ ./search.sh 100nt_upstream_of_mTSS.fas CAATCTCC
想法:第一个命令行参数有效,并且被正确替换。为什么第二个没有正确替换?
#!/bin/bash
file=$1
awk -v s="$2" 'i=index($0, s){print "line: " NR, "pos: " i}' "$file"
Testfile(test.txt):
1 GAGAGAGAGA
2 CTCTCTCTCT
3 TATATATATA
4 CGCGCGCGCG
5 CCCCCCCCCC
6 GGGGGGGGGG
7 AAAAAAAAAA
8 TTTTTTTTT
9 TGATTTTTT
10 CCCCCCCCGA
$ ./search.sh test.txt GA
将打印:
行:1位:1
行:4位:2
行:6位:1
行:9 pos:2
行:10位:9
此脚本将仅在我的模式的第一个字符的行中打印行和第一个匹配位置。如何设置打印所有结果并使用完整模式?
答案 0 :(得分:1)
据我所知,您希望将Input_file(您希望通过脚本处理的文件)作为参数传递,如果是这种情况,那么以下内容可能对您有帮助。
cat search.sh
#!/bin/bash
variable=$1
awk 's=index($0, "CAATCTCC"){print "line=" NR, "start position=" s}' "$variable"
./search.sh 100nt_upstream_of_mTSS.fas