Copie e cole o registro do cabeçalho em detalhes

0

Observado que há uma posição alterada para o tipo de dados da string depois que a contagem foi anexada no final.

Por favor, me ajude o comando unix para obter a saída esperada.

       awk '$2=="H" {x = substr($3,1,4); next} {$(NF+1) = x} 1'

Entrada:

12      H   0003A 
12305245D   2500 AB   5454 87870001A 
12305245D   2500 ABC  5454 87870002A 
12305245D   2500 ABCD 5454 87870003A

Resultado esperado:

12      H   0003A 
12305245D   2500 AB   5454 87870001A 0003 
12305245D   2500 ABC  5454 87870002A 0003
12305245D   2500 ABCD 5454 87870003A 0003

Saída real:

12      H   0003A 
12305245D   2500 AB 5454 87870001A 0003
12305245D   2500 ABC 5454 87870002A 0003
12305245D   2500 ABCD 5454 87870003A 0003
    
por Chakkara 02.07.2018 / 12:29

1 resposta

1

Ao definir o separador de campo como uma string vazia com -F '' , você está dizendo ao awk para tratar cada caractere como um campo separado. Portanto, $ é nunca igual a H (e $3 nunca pode ter a substring indicada). Em vez disso, use o separador padrão (espaço em branco).

Você também parece querer adicionar a substring como um campo delimitado separado print $0, x em vez de anexá-lo como uma string ( $0 = $0 x )

$ awk '$2=="H" {x = substr($3,1,4)} $2!="H" {print $0, x}' input
12305245D   2500 AB   5454 87870001A  0003
12305245D   2500 ABC  5454 87870002A  0003
12305245D   2500 ABCD 5454 87870003A 0003

Uma versão simplificada:

$ awk '$2=="H" {x = substr($3,1,4); next} {print $0, x}' input
12305245D   2500 AB   5454 87870001A  0003
12305245D   2500 ABC  5454 87870002A  0003
12305245D   2500 ABCD 5454 87870003A 0003

OBSERVAÇÃO estas respostas mantêm estritamente a posição dos campos de entrada: o espaçamento variável da coluna final é o resultado da quantidade variável de espaço em branco em sua entrada postada .

    
por 02.07.2018 / 14:51