Написание скрипта, который использует agrep для циклического прохождения строк в документе по строкам в другом документе и получения результата - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь написать скрипт, который использует agrep для циклического просмотра файлов в одном документе и сопоставления их с другим документом.Я полагаю, что это может использовать вложенный цикл, однако я не совсем уверен.В шаблонном документе мне нужно, чтобы он взял одну строку и сопоставил ее с другими строками в другом документе, затем перешел к следующей строке и сопоставил ее снова

enter image description here

Если по какой-то странной причине невозможно увидеть изображения, я включил здесь и ссылки внизу.Кроме того, если вам нужно, чтобы я объяснил больше, просто дайте мне знать.Это мой первый пост, поэтому я не уверен, как это будет восприниматься или я использовал правильные термины:)

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 

1 Ответ

0 голосов
/ 30 апреля 2019

Хорошо, теперь я понял, я думаю.Это должно помочь вам начать.

#!/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 имени файла.

...