Unix Cria uma nova coluna removendo espaços

1

Eu tenho um arquivo csv grande que contém várias colunas. Eu quero que os espaços sejam removidos da primeira coluna e queira criar isso como uma nova coluna.

Exemplo ...

Entrada:

a b,xyz,d e f    
a b c,xyz,d e f    
a b c d,xyz,d e f   

Saída:

ab,a b,xyz,d e f   
abc,a b c,xyz,d e f   
abcd,a b c d,xyz,d e f    
    
por Thomas 13.11.2017 / 04:22

4 respostas

1

Usando sed :

sed 'h;s/,.*/,/;s/ //g;G;s/\n//' data.csv

Explicado:

h - stash current line to the hold space
s/,.*/,/ - remove everything after the first comma
s/ //g - remove spaces
G - append the line from the hold space back to the pattern space
s/\n// - remove extra newline, as left by G
    
por 15.11.2017 / 20:06
0
awk 'BEGIN { FS=","; OFS="," } { col=$1; gsub(/ /, "", col); print col,$0 }' file

Bastante auto-explicativo. Use vírgulas como separadores de colunas de entrada e saída. Extrai a primeira coluna e subtrai os espaços. Saída da primeira coluna modificada seguida da linha original.

    
por 13.11.2017 / 04:50
0

bash solution assumindo um arquivo test.txt :

#!/bin/bash

while read -r line; do
   IFS=',' read -ra fields <<<"$line"
   (IFS=','; echo "${fields[0]//\ /},${fields[*]}")
done <"test.txt"

exit

Isso tira proveito do IFS para ler os valores do csv em uma matriz e gerá-los. Leia cada linha de test.txt em uma string e, em seguida, leia esta linha em uma matriz dividindo-a em vírgulas. Imprima o primeiro elemento dessa matriz com espaços removidos e, em seguida, a matriz inteira. Um array entre aspas usando * produzirá os elementos separados por IFS , que anteriormente definimos como vírgula. A declaração em linha de IFS na instrução read e dentro de uma subshell () preservará o valor de IFS para o restante da execução do script.

    
por 15.11.2017 / 19:42
0

Usando bash com ferramentas padrão:

$ paste -d ',' <( cut -d ',' -f 1 file | tr -d ' ' ) file
ab,a b,xyz,d e f
abc,a b c,xyz,d e f
abcd,a b c d,xyz,d e f

paste combina a entrada dos dois arquivos fornecidos com uma vírgula como delimitador.

O primeiro arquivo é produzido por uma substituição de processo que extrai a primeira coluna delimitada por vírgula do arquivo e remove seus espaços.

O segundo arquivo é simplesmente o arquivo original não modificado.

    
por 10.02.2018 / 11:02