[英]passing command line arguments to awk in shell script
我正在尝试编写一个小的 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"
测试文件(test.txt):
1 嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎好
2 CTCTCTCTCT
3 塔塔塔塔
4 CCGCGCGCGCG
5 中交中交
6 GGGGGGGGGG
7 AAAAAAAAA
8 TTTTTTTTTT
9 TGATTTTTT
10中交会
$ ./search.sh test.txt GA
将打印:
行:1 位置:1
行:4 位置:2
行:6 位置:1
行:9 位置:2
行:10 位置:9
此脚本将仅在我的模式的第一个字符的行中打印行和第一个匹配位置。 我如何设法打印所有结果并使用完整模式?
据我了解,您希望将 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.