Использование Uniq -c с регулярным выражением или подсчет количества удаленных строк

У меня есть файл с разделителями табуляции, в котором содержится информация о генетическом материале. Некоторая информация разрезается на меньший файл табуляции с некоторыми извлеченными столбцами, а uniq используется для обеспечения отсутствия дубликатов. Счет хранится, что важно позже по трубопроводу. Я хочу изменить основу функции uniq, просто основываясь на последовательности в одном поле, на регулярное выражение из другого поля. Поле, которое я хочу извлечь, находится в таком формате:

14:50065421-50065521:12397472_t14_w100_x1 

но бит после второго двоеточия изменяется в зависимости от ввода файла. Я хочу использовать uniq на основе первого тайма, так что:

 14:50065421-50065521 

Я проверил регулярное выражение '((^ [0-9] {0,2} | x | y | MT): [0-9] {0,9} – [0-9] {0,9}: ) ', и он работает с небольшим образцом данных. Я нашел некоторые способы использования grep и perl-скрипта, которые работают для удаления строк на основе регулярного выражения, но ни один из них не обеспечивает подсчет (именно поэтому uniq намного более идеален). Есть ли способ использовать регулярное выражение с uniq? Или есть лучший способ, который также сохранит количество удаленных?

Текущий код:

 cat ${TAB_FILE} | \ sed -e '1,2d' | \ cut -f3,4 | \ sort -k1 -u | \ sort -k2 | \ uniq -cf1| \ sort -rn > t1 cat ${TAB_FILE} | \ sed -e '1,2d' | \ awk {'print $3"\t "$6"\t" $7"\t "$4'} | \ sort -k4 > t2 awk 'FNR==NR {C[$2]=$1;next}FNR==1 \ {print "Count Chromosome:Positions:QNAME Sequence Exon Transcript_ID"; next}$1 in C \ {print C[$1], $1, $4, $3, $2}' t1 t2 > t3 cat t3 | awk '{print "//NODECLASS\t\"" $2"_"$1 "\"\t\"Exon " $4 "\"\t\"" $5 "\""}' 

С первого шага это столбец 1 разреза, на который я хотел бы основывать свое регулярное выражение, вместо того, чтобы использовать столбец 2. Любая помощь будет принята с благодарностью, пожалуйста, не стесняйтесь спрашивать, нужно ли мне разъяснять что-либо.

Пример файла табуляции:

 queryHits subjectHits readname readSeq geneid transcriptid exonnumber genename biotype 350851 1 14:50065421-50065521:12397472_t14_w100_x1 CGCTGCCAGCTGCGCGCTCGGGGGAAAAGACGTTGCGCCCCCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCA ENSG00000165501 ENST00000298288 1 LRR1 protein_coding 350851 5 14:50065421-50065521:12397472_t14_w100_x1 CGCTGCCAGCTGCGCGCTCGGGGGAAAAGACGTTGCGCCCCCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCA ENSG00000165501 ENST00000318317 1 LRR1 protein_coding 350851 8 14:50065421-50065521:12397472_t14_w100_x1 CGCTGCCAGCTGCGCGCTCGGGGGAAAAGACGTTGCGCCCCCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCA ENSG00000165501 ENST00000554869 1 LRR1 protein_coding 350852 1 14:50065461-50065561:12655987_t14_w100_x1 CCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAG ENSG00000165501 ENST00000298288 1 LRR1 protein_coding 350852 5 14:50065461-50065561:12655987_t14_w100_x1 CCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAG ENSG00000165501 ENST00000318317 1 LRR1 protein_coding 350852 8 14:50065461-50065561:12655987_t14_w100_x1 CCGCCGACTGCCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAG ENSG00000165501 ENST00000554869 1 LRR1 protein_coding 350853 1 14:50065471-50065571:22679947_t13_w100_x1 CCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAGCCGTTTCCCG ENSG00000165501 ENST00000298288 1 LRR1 protein_coding 350853 5 14:50065471-50065571:22679947_t13_w100_x1 CCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAGCCGTTTCCCG ENSG00000165501 ENST00000318317 1 LRR1 protein_coding 350853 8 14:50065471-50065571:22679947_t13_w100_x1 CCGGTTTCCCGGGCGCGAGCCCGGATCCAGGTGGTCAGTCCCGGTACGCAACCACGGCGAGAACCCGGCCCTGCTAAGGGAGAAGGGAAGCCGTTTCCCG ENSG00000165501 ENST00000554869 1 LRR1 protein_coding 

Пример выходного файла, в котором uniq не используется, я хочу удалить дубликаты, например, строки 4, 5 и 6 или 8, 9 и 10:

 //NODECLASS "Chromosome:Positions:QNAME_Count" "Exon Exon" "Transcript_ID" //NODECLASS "14:50067283-50067383:20149917_t14_w100_x1_1" "Exon 1" "ENST00000557531" //NODECLASS "14:50067284-50067366:14257122_t14_w100_x1_2" "Exon 1" "ENST00000557531" //NODECLASS "14:50067285-50067385:2072777_t12_w100_x1_1" "Exon 1" "ENST00000557531" //NODECLASS "14:50074262-50074362:4355312_t12_w100_x1_1" "Exon 3" "ENST00000298288" //NODECLASS "14:50074262-50074362:4355312_t12_w100_x1_1" "Exon 4" "ENST00000540712" //NODECLASS "14:50074262-50074362:4355312_t12_w100_x1_1" "Exon 4" "ENST00000554869" //NODECLASS "14:50067286-50067386:15839225_t12_w100_x1_3" "Exon 1" "ENST00000557531" //NODECLASS "14:50074263-50074363:8914169_t11_w100_x1_1" "Exon 3" "ENST00000298288" //NODECLASS "14:50074263-50074363:8914169_t11_w100_x1_1" "Exon 4" "ENST00000540712" //NODECLASS "14:50074263-50074363:8914169_t11_w100_x1_1" "Exon 4" "ENST00000554869" //NODECLASS "14:50067287-50067387:5439923_t13_w100_x1_1" "Exon 1" "ENST00000557531" //NODECLASS "14:50067287-50067387:14106336_t12_w100_x1_3" "Exon 1" "ENST00000557531" //NODECLASS "14:50074404-50074504:15492363_t11_w100_x1_1" "Exon 3" "ENST00000298288" //NODECLASS "14:50074404-50074504:15492363_t11_w100_x1_1" "Exon 4" "ENST00000540712" //NODECLASS "14:50074404-50074504:15492363_t11_w100_x1_1" "Exon 4" "ENST00000554869" //NODECLASS "14:50074135-50074235:11346262_t11_w100_x1_2" "Exon 3" "ENST00000298288" 

  • сортировать и uniq в awk
  • Групповая команда uniq?
  • Удаление строк с одним общим полем
  • печатать дубликаты строк только в полях 1,2 из файла csv
  • получить список месяцев, используя dseq from dateutils
  • Как я могу получить последний номер строки уникальных команд, когда grepping мой файл истории?
  • Как найти количество неупорядоченных пар из списка
  • Отображение имен файлов с помощью grep
  • 2 Solutions collect form web for “Использование Uniq -c с регулярным выражением или подсчет количества удаленных строк”

    Я не уверен, что вы хотите точно, так как вы, похоже, слишком зациклились на своем типе / uniq.

    Однако, если все, что вам нужно, это обрезка повторяющихся строк, например, 4,5,6 и 8,9,10, тогда вы можете сделать это в своем последнем файле, который вы показываете, который имеет // строки NODECLASS:

     perl -F\" -lane ' print,next if $. < 3; print if ! $h{($F[1] =~ /:(.*?):/)[0]}++; ' NODE_CLASS_file 

    где первые две строки пропущены. В то время как для остальных мы смотрим на 2-ое поле, число между: /:(.*?):/ предоставит вам номер, после которого вам нужно попасть в скалярный контекст, расширив его в (...)[0] и передать это как ключ к хешу %h . Распечатайте текущую строку только в том случае, если этот ключ еще не был замечен.

    Мне удалось найти грубое решение, в котором я добавляю начальные позиции в файл вкладок в виде отдельного столбца. Затем при создании файла Nodeclass я извлекаю этот столбец и использую sort | uniq -c на основе этого вместо столбца последовательности. Кажется, он делает то, что я хотел, но он немного медленнее, потому что скрипт, создающий файл вкладки, должен создать целый дополнительный столбец! Благодаря 🙂

    Interesting Posts

    если в переменной PATH существует 2 команды с одинаковым именем файла, которые будут выполнены?

    Как сортировать в первом столбце каждые 4 строки в файле с ключом во втором столбце

    Как я могу отлаживать трафик в коммутируемой сети с помощью Wireshark?

    sed regex не работает

    Команда перенаправления неожиданна

    Отобразить то, что было скопировано `cp` (используя` ksh`)

    : установка драйвера просит меня вставить диск

    Как получить показатели о снижении трафика через iptables?

    что означает звезда в файле passwd?

    Есть ли способ установить правила для минимизации в системный лоток для приложений, которые сами не поддерживают его?

    Почему не рекомендуется устанавливать загрузочный раздел на lvm?

    Можно ли запустить fc, не показывая мои введенные команды?

    Изменение перезагрузки имени хоста возвращается к оригиналу

    Замените несколько строк строкой, когда номера строк хранятся в файле

    Ошибка обновления Homebrew

    Linux и Unix - лучшая ОС в мире.