читать запись файла по записи и делать преобразование в последующую запись на основе вышеуказанной записи и записывать в другой файл

Файл данных является файлом фиксированной длины, и я хочу прочитать запись файла по записи и сделать преобразования в последующие записи на основе предыдущих записей (и записать результаты в другой файл).

Пример :

CTD1234abcdTRN0001 AA 5678defg BB 8910erty CTD5678qwerTRN5678 AA 9876bvcn BB 8765zxcv 

Теперь я хочу, чтобы TRN0001 из записи CTD записывался в последующие записи AA и BB , аналогично для следующих записей CTD . Мой вывод должен выглядеть так:

 CTD1234abcdTRN0001 AA 5678defgTRN0001 BB 8910ertyTRN0001 CTD5678qwerTRN5678 AA 9876bvcnTRN5678 BB 8765zxcvTRN5678 

Пример 2:

 AAABBBB11115678xxxx BBBCCCC22221234YYYY MTD0001abcdTRN12345 abcdedfg AA 0002bcde BB 0003defg CCCDDDD33331234zzzz MTD0003qwerTRN56789 defghigk AA 9876bvcn BB 8765zxcv XXXBBBB11115678aaaa YYYCCCC22221234bbbb 

должен стать

 AAABBBB11115678xxxx BBBCCCC22221234YYYY MTD0001abcdTRN12345 abcdedfg AA 0002bcdeTRN12345 BB 0003defgTRN12345 CCCDDDD33331234zzzz MTD0003qwerTRN56789 defghigk AA 9876bvcnTRN56789 BB 8765zxcvTRN56789 XXXBBBB11115678aaaa YYYCCCC22221234bbbb 

Не могли бы вы помочь мне в этом, как вы можете добиться этого, используя сценарии оболочки UNIX?

2 Solutions collect form web for “читать запись файла по записи и делать преобразование в последующую запись на основе вышеуказанной записи и записывать в другой файл”

 $ cat testdata CTD1234abcdTRN0001 AA 5678defg BB 8910erty CTD5678qwerTRN5678 AA 9876bvcn BB 8765zxcv CTDxxxxxxxxTRNyyyy AA foobarfo BB foobarfo AAABBBB11115678xxxx BBBCCCC22221234YYYY MTD0001abcdTRN12345 abcdedfg AA 0002bcde BB 0003defg CCCDDDD33331234zzzz MTD0003qwerTRN56789 defghigk AA 9876bvcn BB 8765zxcv XXXBBBB11115678aaaa YYYCCCC22221234bbbb $ awk '/^(C|M)TD/ { s=match($0, /[[:space:]]/); postfix=substr($0, 12, length($0)-s); print; next } /^(AA|BB)[[:space:]]/ { print $0 postfix; next } 1' testdata CTD1234abcdTRN0001 AA 5678defgTRN0001 BB 8910ertyTRN0001 CTD5678qwerTRN5678 AA 9876bvcnTRN5678 BB 8765zxcvTRN5678 CTDxxxxxxxxTRNyyyy AA foobarfoTRNyyyy BB foobarfoTRNyyyy AAABBBB11115678xxxx BBBCCCC22221234YYYY MTD0001abcdTRN12345 abcdedfg AA 0002bcdeTRN12345 BB 0003defgTRN12345 CCCDDDD33331234zzzz MTD0003qwerTRN56789 defghigk AA 9876bvcnTRN56789 BB 8765zxcvTRN56789 XXXBBBB11115678aaaa YYYCCCC22221234bbbb 

То, что оболочка Unix (довольно ограниченный) язык программирования является бонусом за его работу по организации работы другой программы. Его нельзя использовать для всего.

Такие задания обработки текста лучше выполняются с помощью специально созданных для этой цели языков сценариев, таких как Perl или Python.

  • Удалить последний символ из строки, захваченной с помощью awk
  • Как выборочно удалять столбцы и строки с помощью bash?
  • Как разбить несколько пробелов на один с помощью sed?
  • Awk сравнивает 2 файла, распечатывает совпадение вместе с несоответствующими строками, заполненными 0
  • Bash: преобразовать многострочный вывод в одну строку
  • Как удалить все комментарии из файла?
  • Использование AWK для удаления результата линии и вывода
  • Сравнение меток времени в awk
  • Найдите значение в одном столбце и напечатайте соответствующее значение от другого
  • Команды вырезания и вставки
  • Как сделать возвращаемое значение grep без запятой
  • Interesting Posts

    KVM и пространство подкачки

    Miniupnp считает, что мой маршрутизатор не поддерживает UPnP

    AppArmor: Возможно ли использование нескольких профилей для одного приложения (Firefox, Thunderbird)? Синтаксис?

    Что означает значение pasv_enable и связанное с ним поле s в файле vsftpd.conf

    Создание файлов устройств на диске в / dev / disk / by-path

    Как переименовать несколько файлов с помощью сценария оболочки?

    Пользовательская раскладка клавиатуры не используется дословно

    Используйте SED или AWK для перемещения строки в новый столбец и строку

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

    Мониторинг процессов, пытающихся получить доступ к несуществующему файлу или каталогу

    Выходные строки, содержащие конкретные строки

    Приложение с именем X использует слишком много CPU

    репозитории rhel с gstreamer-plugins-уродливыми

    Функция bash, которая отправляет электронную почту после завершения работы

    Отключить уведомления в Scientific-linux 6.1

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