Remoção de espaços extras, mas não da nova linha de arquivos csv

1

Eu tenho que comparar 2 arquivos usando o comando comm como abaixo

comm -23 csv1 csv2 > csv3

Eu pareço enfrentar o problema que ambos os csv são gerados a partir de diferentes fontes (csv1 é extraído de outro csv contendo muitas colunas e a primeira coluna é extraída dele e o csv 2 é gerado a partir do DB e consiste em alguns espaços extras)

csv2 contém dados como abaixo

Vp1234▒▒▒▒
vp4567▒▒▒▒
vp6789-v2▒▒▒

(onde indica um espaço). Enquanto csv1 contém dados semelhantes (é por isso que eu tenho que comparar para encontrar os dados existentes apenas no csv1), mas sem espaços.

Por isso, é difícil comparar os dois.

Eu tentei sed, mas não funcionou ou tentou de forma errada.

    
por user3116123 17.02.2014 / 17:47

1 resposta

3

Se o único problema são os espaços, você pode tentar usar diff em vez de comm porque ele tem o sinal -w :

   -w, --ignore-all-space
          ignore all white space

Você pode então analisar a saída para imitar comm -23 . Por exemplo:

diff -w  csv1 csv2 | grep -Po "^< \K.*" > csv3

Como alternativa, você pode remover todos os espaços iniciais e finais de seu arquivo:

sed -i 's/ *$//; s/^ *//' csv2
    
por 17.02.2014 / 18:14

Tags