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

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

Пример :

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.

  • Разделите элементы столбца на столбец с одним элементом
  • grep seach pattern из файла, содержащего список шаблонов, запись результата каждого шаблона в indivdual файлы
  • Изменить строку, если оригинал не соответствует определенной строке.
  • Соответствие парам «значение ключевого слова» из полуструктурированного ввода
  • Сравните идентификационные номера с номерами ревизий в двух файлах, и если rev # для файла A меньше, чем файл B, замените строку на новый rev #?
  • Сравнение первого столбца в разных файлах
  • Проблема с горизонтальным слиянием csv-файлов под Cygwin
  • Разделение файлов в Unix с использованием значений в файле
  • Моя awk-программа для изменения пробелов в вкладках не работает
  • Линии фильтра, содержащие фиксированное число экземпляров шаблона
  • захватить из текстового файла диапазон с использованием двух переменных в качестве начального и конечного параметров
  • Linux и Unix - лучшая ОС в мире.