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
Как вы обнаружили, 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
)
#! /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
.