Фильтрация.CSV файла на основе последовательных чисел в строке

Вы можете использовать функцию командной строки Bash .

$ ls -l [a-k]*

[A-K] относится к алфавитам из A к K .
* относится к любому характеру любое количество раз.

Так что теперь Bash ищет файлы, начиная с буквы A - k и с последующим любым символом любое количество раз.

-1
14.10.2014, 23:12
3 ответа

Если каждая из полей для сравнения имеет один символ нечислового префикса ( 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
1
28.01.2020, 05:09

Если вы можете использовать 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
1
28.01.2020, 05:09

Этот скрипт 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 использует для соответствия строкам.

0
28.01.2020, 05:09

Теги

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