ler registro de arquivo por registro e fazer transformação para o registro subsequente baseado no registro acima e gravar em outro arquivo

0

O arquivo de dados é um arquivo de tamanho fixo, e eu quero ler o registro do arquivo pelo registro e fazer transformações nos registros subseqüentes com base nos registros anteriores (e gravar os resultados em outro arquivo).

Exemplo :

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

Agora, quero que TRN0001 do registro CTD seja gravado nos registros AA e BB subsequentes, da mesma forma para os registros CTD a seguir. Minha saída deve se parecer com:

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

Exemplo 2:

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

deve se tornar

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

Você pode me ajudar nisso, como você pode conseguir isso usando o shell script UNIX?

    
por user36697 07.04.2013 / 13:00

2 respostas

2
$ 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
    
por 07.04.2013 / 14:57
2

O shell Unix é uma linguagem de programação (bastante limitada) é um bônus para o trabalho de organizar o trabalho de outros programas. Não é usado para tudo.

Esses trabalhos de processamento de texto são melhor feitos com linguagens de script criadas especificamente para esse fim, como Perl ou Python.

    
por 07.04.2013 / 13:54