Разбор сложного текстового файла с использованием команд Unix

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

>Cluster 423 0 56aa, >HWI-ST1448:257:C3V2HACXX:1:1106:19087:2550.1... at 92.86% 1 64aa, >HWI-ST1448:257:C3V2HACXX:1:1106:15943:81371.1... * 2 41aa, >HWI-ST1448:257:C3V2HACXX:1:1106:12438:91360.3... at 90.24% 3 45aa, >HWI-ST1448:257:C3V2HACXX:1:1108:13046:13861.1... at 91.11% 4 52aa, >HWI-ST1448:257:C3V2HACXX:1:1110:12260:2424.2... at 90.38% >Cluster 434 0 64aa, >HWI-ST1448:257:C3V2HACXX:1:1106:15723:89894.1... * 1 46aa, >HWI-ST1448:257:C3V2HACXX:2:1312:1967:40935.2... at 97.83% 

В основном, идентификатор помечен * в конце, а размер группы – последний номер группы +1.

Выход, который я хочу произвести, будет (обратите внимание на размер группы в конце):

 HWI-ST1448:257:C3V2HACXX:1:1106:15943:81371.1 5 HWI-ST1448:257:C3V2HACXX:1:1106:15723:89894.1 2 

Есть идеи?

  • Распечатайте строку только в том случае, если следующая строка НЕ ​​содержит определенное совпадение
  • Файлы Grep, исключая несколько имен файлов
  • Результаты трубы grep в поиске
  • Использование grep для поиска первых двух номеров IP-адресов?
  • Использование модификаторов Perl-совместимого Regex (PCRE) в grep
  • Показать весь файл до матча
  • Как выполнить команду в заданной строке в каждой строке файла?
  • Grep: поиск и замена полной строки
  • 4 Solutions collect form web for “Разбор сложного текстового файла с использованием команд Unix”

    Вот несколько грубых разрезов (без обработки ошибок):

     awk '/\*$/ { save_id = substr($3, 2, length($3)-4) } /^[0-9]/ { save_num = $1 } NR > 1 && /^>/ {print save_id, save_num+1 } END {print save_id, save_num+1 } ' data_file 
    • В строке, которая заканчивается на * (т. Е. Соответствует /*$/ ), извлеките идентификатор группы из третьего слова, отбросив первый символ ( > ) и последние три ( ... ).
    • В строках, начинающихся с числа, сохраните номер (т. Е. Первое слово).
    • Когда вы встретите строку, начинающуюся с > (но исключая первую строку в файле, указав NR > 1 ) или конец файла, выведите соответствующие сохраненные значения.
     perl -F'\n' -lan00e 'print "$1\t$#F" if />(.*)\.{3} \*$/m' 
     sed '/^[>0-9]/h;s/.*>\(.*[0-9]\).*\*/[\1 ]P /p $s/.*//;/^[>0-9[]/d;g;s/ .*/ 1+pc/ ' <<\DATA | dc >Cluster 423 0 56aa, >HWI-ST1448:257:C3V2HACXX:1:1106:19087:2550.1... at 92.86% 1 64aa, >HWI-ST1448:257:C3V2HACXX:1:1106:15943:81371.1... * 2 41aa, >HWI-ST1448:257:C3V2HACXX:1:1106:12438:91360.3... at 90.24% 3 45aa, >HWI-ST1448:257:C3V2HACXX:1:1108:13046:13861.1... at 91.11% 4 52aa, >HWI-ST1448:257:C3V2HACXX:1:1110:12260:2424.2... at 90.38% >Cluster 434 0 64aa, >HWI-ST1448:257:C3V2HACXX:1:1106:15723:89894.1... * 1 46aa, >HWI-ST1448:257:C3V2HACXX:2:1312:1967:40935.2... at 97.83% DATA 

    ВЫВОД

     HWI-ST1448:257:C3V2HACXX:1:1106:15943:81371.1 5 HWI-ST1448:257:C3V2HACXX:1:1106:15723:89894.1 2 

    Это довольно просто. Он сохраняет копию первого номера в строке для любой строки с символом. Он печатает только в том случае, если он может успешно удалить * в качестве последнего символа в строке или если строка не начинается с >0-9 . В последней строке все символы удаляются. Таким образом, dc получает одну строку [ stuff here ] в p для Cluster и одно маленькое дополнение, когда на пустых строках sed извлекает этот сохраненный номер.

      grep "\*" file.txt |grep -E "(?<=>)[\w+\s\W]+"|sed 's/\.\.\.\*//' 
    Interesting Posts

    (Fedora 25) Изменение яркости экрана с помощью функциональных клавиш (ASUS TP300L)

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

    Ядро init без параметра «root =»

    Force OpenSSH / pam / pam_ldapd для выполнения pam_ldapd (sshd: auth) с аутентификацией с открытым ключом

    Используя rsync для инкрементного резервного копирования, что происходит, когда оригинальная полная резервная копия должна быть удалена?

    SSH: запретить ввод пароля для root, но оставить подсказку

    Как контролировать уровень громкости микрофона?

    Горячая клавиша для прокрутки внутри терминала

    Bash Script: нет такого файла или каталога при определении переменной через источник vars.txt

    Как я могу открыть файл в VIM в режиме readonly, если он уже имеет swap-файл?

    Как извлечь часть текста из файла?

    Как установить Apricity на логический том с помощью Calamares?

    Есть ли способ узнать, сколько процессов открывает файл?

    Неверная переменная $ HOME env для вновь созданного пользователя

    Получение двух полей из одной строки вместе

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