我正在尝试编写一个脚本,该脚本使用agrep遍历一个文档中的文件并使它们与另一个文档匹配。我相信这可能会使用嵌套循环,但是,我不确定。在模板文档中,我需要它取一个字符串并将其与另一个文档中的其他字符串进行匹配,然后移至下一个字符串并再次进行匹配
如果由于某种奇怪的原因而无法查看图像,我也在底部添加了链接。另外,如果您需要我解释更多信息,请告诉我。这是我的第一篇文章,所以我不确定如何理解或是否使用了正确的术语:)
Template agrep/highlighted- https://imgur.com/kJvySbW
Matching strings not highlighted- https://imgur.com/NHBlB2R
我已经在各种网站上找到了有关循环的信息
#!/bin/bash
#agrep script
echo ${BASH_VERSION}
TemplateSpacers="/Users/kj/Documents/Research/Dr. Gage
Research/Thesis/FastA files for AGREP
test/Template/TA21_spacers.fasta"
MatchingSpacers="/Users/kj/Documents/Research/Dr. Gage
Research/Thesis/FastA files for AGREP test/Matching/TA26_spacers.fasta"
for * in filename
do
agrep -3 * to file im comparing to
#potentially may need to use nested loop but not sure
答案 0 :(得分:0)
好吧,我想我明白了。这应该可以帮助您入门。
#!/bin/bash
document="documentToSearchIn.txt"
grep -v spacer fileWithSearchStrings.txt | while read srchstr ; do
echo "Searching for $srchstr in $document"
echo agrep -3 "$srchstr" "$document"
done
如果看起来正确,请在echo
之前删除agrep
,然后再次运行。
如果如您在评论中所述,要将脚本存储在其他地方,例如在$HOME/bin
中,则可以执行以下操作:
mkdir $HOME/bin
将上面的脚本另存为$HOME/bin/search
。现在使用以下命令使其可执行(只需一次):
chmod +x $HOME/bin/search
现在将$HOME/bin
添加到您的PATH中。因此,找到以下行:
export PATH=...
在您的登录配置文件中,并将其更改为包括新目录:
export PATH=$PATH:$HOME/bin
然后启动一个新的终端,您应该可以运行:
search
如果您希望能够指定字符串文件和要搜索的文档的名称,则可以将代码更改为此:
#!/bin/bash
# Pick up parameters, if supplied
# 1st param is name of file with strings to search for
# 2nd param is name of document to search in
str=${1:-""}
doc=${2:-""}
# Ensure name of strings file is valid
while : ; do
[ -f "$str" ] && break
read -p "Enter strings filename:" str
done
# Ensure name of document file is valid
while : ; do
[ -f "$doc" ] && break
read -p "Enter document name:" doc
done
echo "Search for strings from: $str, searching in document: $doc"
grep -v spacer "$str" | while read srchstr ; do
echo "Searching for $str in $doc"
echo agrep -3 "$str" "$doc"
done
然后您可以运行:
search path/to/file/with/strings path/to/document/to/search/in
或者,如果您这样运行:
search
它将要求您提供2个文件名。