Вы можете использовать функцию командной строки Bash .
$ ls -l [a-k]*
[A-K]
относится к алфавитам из A
к K
. *
относится к любому характеру любое количество раз.
Так что теперь Bash ищет файлы, начиная с буквы A
- k
и с последующим любым символом любое количество раз.
Если каждая из полей для сравнения имеет один символ нечислового префикса ( C
или A
в вашем примере), Тогда вы должны быть в состоянии извлечь и сравнить числовые подстроки напрямую в awk, например,
$ awk -F"[ \t,]+" 'substr($5,2)+0==substr($3,2)+1 && substr($9,2)+0==substr($7,2)+1' file.csv
RZ_AUTO_1, 1cx0, C118, B, C119, B, A165, B, A166, B, CC/AA Canonical ribose-zipper
RZ_AUTO_2, 1drz, C118, B, C119, B, A165, B, A166, B, CC/AA Canonical ribose-zipper
RZ_AUTO_3, 1ffk, C208, 0, G209, 0, A665, 0, A666, 0, CG/AA Canonical ribose-zipper
Если вы можете использовать Perl
:
$ perl -F, -anle '
map { s/\D//g } @F;
print if ++$F[2] == $F[4] and ++$F[6] == $F[8];
' file
RZ_AUTO_1, 1cx0, C118, B, C119, B, A165, B, A166, B, CC/AA Canonical ribose-zipper
RZ_AUTO_2, 1drz, C118, B, C119, B, A165, B, A166, B, CC/AA Canonical ribose-zipper
RZ_AUTO_3, 1ffk, C208, 0, G209, 0, A665, 0, A666, 0, CG/AA Canonical ribose-zipper
Этот скрипт Bash делает то, что вы хотите, но не используете только SED
и awk
. Я уверен, что было бы потрачено больше времени в разработке этого, это может быть дополнительно уточнено, но он, примерно, делает то, что вы хотите.
$ more cmd.bash
#!/bin/bash
while read line; do
f1=$(echo "$line" | awk -F", " '{print $3}')
f2=$(echo "$line" | awk -F", " '{print $7}')
echo "$line" | grep "${f1}.*$(expr ${f1:2} + 1).*${f2}.*$(expr ${f2:2} + 1)"
done <file
$ ./cmd.bash
RZ_AUTO_1, 1cx0, C118, B, C119, B, A165, B, A166, B, CC/AA Canonical ribose-zipper
RZ_AUTO_2, 1drz, C118, B, C119, B, A165, B, A166, B, CC/AA Canonical ribose-zipper
RZ_AUTO_3, 1ffk, C208, 0, G209, 0, A665, 0, A666, 0, CG/AA Canonical ribose-zipper
Одна область, где она должна быть дополнительно расширена, находится в выборе совпадений в GREP
. Это может привести к ложным позитикам в его текущей форме. Это может быть сделано лучше, используя инструмент такого awk
или путем повышения структуры, который GREP
использует для соответствия строкам.