используйте grep для возврата всех строк из первой строки, соответствующей шаблону, до другого шаблона

Pregunta duplicada:¿Qué significa *. *;auth,authpriv.none -¿La línea /var/log/syslog significa en el archivo de configuración rsyslog?

El guión significa que no vacíe el búfer del kernel en el disco después de cada escritura en el archivo

0
20.07.2019, 19:52
2 ответа

Как вы обнаружили, grep -Aнегибок в том смысле, что позволяет указать только статическое количество строк контекста.

Вместо этого здесь приведена команда awk, которая определяет, когда возникает выбранная последовательность, и выводит ее до тех пор, пока не встретит другой заголовок последовательности, не соответствующий критериям:

awk -v name='trnF' -v OFS=':\t' '
    FNR == 1 && NR > 1 { print "--" }
    /^>/ { out=0 }
    $0 ~ "^>.*" name { out=1 }
    out == 1 { print FILENAME, $0 }' files

Опция -v name=somethingназначит somethingпеременной nameв коде awk, и она будет использоваться как часть регулярного выражения, которое соответствует строке заголовка fasta, содержащей заданную строку.

Вывод последней части awkможет выглядеть примерно так

file:   >species one; trnF(ggc)
file:   GGCCC
file:   AACGC
--
file1:  >species one; trnF(ggc)
file1:  GGCCC
file1:  AACGC
--

(:, за которым следует табуляция, используемая в качестве разделителя между именем файла и данными, можно изменить, установив OFSна что-то другое в командной строке с помощью-v OFS=somethingelse)

2
28.01.2020, 02:29
#! /bin/bash

for i in dir/file*
do
    [ -n "$is_first_file" ] && echo
    awk -v filename="$i" 'BEGIN { temp=1 }  { if ($1 ~ /^>/ && temp == 0){exit} } {if ( $1 ~ /^>/ && temp == 1 ) {print filename,"\b:","\b"$0,temp=0 } else { print filename,"\b-","\b"$0 }}' "$i"
    echo -n '--'
    is_first_file=no
done
echo -n -e "\b\b"

Не так много опыта работы с awk, но я думаю, что это должно дать вам точный результат, который вы хотите.

Еще одна ошибка, которую я часто делаю. Не запускайте этот скрипт как sh script_name.

Он использует -eв echo, для чего потребуется bash.

Запустите его как ./script_nameили bash script_name.

0
28.01.2020, 02:29

Теги

Похожие вопросы