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 .