Subtraindo uma string de texto de outros caracteres únicos, talvez usando o awk

3

Existe alguma maneira de subtrair uma coluna de dados contendo texto de outra coluna contendo texto e obter uma terceira coluna contendo caracteres únicos, por exemplo, usando o awk, por exemplo.

Entrada

ab   a
cd   d    
efg  ef

resultado desejado:

ab   a   b
cd   d   c
efg  ef  g
    
por alex 12.06.2012 / 15:08

2 respostas

4

Sim, awk é uma opção adequada:

awk 'NF{t=$1;gsub("["$2"]","",t);print$0,t}' input

No caso de o segundo campo poder conter caracteres com significado especial em classes de caracteres de expressões regulares, estes devem ser escapados. Resolvendo que em POSIX awk é demorado, então eu posto a alternativa GNU awk apenas:

gawk 'NF{print$0,gensub("["gensub(/([\[\]^-])/,"\\\1","g",$2)"]","","g",$1)}' input
    
por 12.06.2012 / 15:14
1

A solução Manatworks está bem. Esta é apenas uma alternativa pura.

while read line
do
  in=${line/ */}
  pat=${line/* /}
  echo $line ${in/$pat}
done < aba.dat

ab a b
cd d c
efg ef g
  • Em in replace ( / ) de $ line, o que é um espaço em branco, seguido por algo - não em regex, mas em estilo globbing.
  • Em pat é o oposto: remova o que está antes do espaço em branco. Removendo, porque a parte de substituição de $ {src / pattern / replacement} está em branco.
  • $ {in / $ pat} substitui pat em in por nada. O pat var precisa ser marcado como variável $ em contraste com a primeira variável / parte (in).
por 12.06.2012 / 15:51