Remova a vírgula das colunas em um arquivo se estiver no final

1

Eu tenho um arquivo separado por tabulação contendo 19 colunas, algumas dessas colunas contêm vírgula no final. Eu quero remover essas vírgulas de todas as colunas, se é no final. Exemplo:

c1   c2   c3   c4   c5  
re,  f,f   d,f,  gf   mk
df   df,  df   dl,  df,

O resultado deve ser e salvo no mesmo arquivo

c1   c2    c3    c4   c5  
re   f,f   d,f   gf   mk
df   df    df    dl   df
    
por Ahmed Mahdi 20.09.2015 / 01:24

3 respostas

2

Você pode fazer isso:

perl -i -pe 's/,(\t|$)/$1/g' file

Isso removerá qualquer vírgula seguida por um espaço, uma guia ou uma nova linha.

Para outros delimitadores de campo, por exemplo, : , use:

perl -i -F: -lane 's/,$// for @F; print join ":",@F' file

Esses comandos alterarão o arquivo original , removerão o -i para testá-lo primeiro.

    
por 20.09.2015 / 01:33
1

Para remover uma única vírgula no final de cada campo:

perl -i -pe 's/,(\t|$)/$1/g' myfile

(\t|$) corresponde a uma guia ou ao final da linha. s/…/…/g substitui todas as ocorrências do padrão (aqui, ,(\t|$) ) pelo texto de substituição fornecido (aqui, $1 , significando a parte do padrão entre parênteses). Os campos que não terminam com uma vírgula não são correspondidos pelo padrão, por isso são impressos sem modificação.

A -p opção instrui o Perl a aplicar a expressão dada a cada linha de entrada e imprimir a linha modificada. A -i opção faz com que o arquivo de entrada seja substituído pela saída resultante.

    
por 20.09.2015 / 01:44
0

Aqui estão algumas novidades impressionantes ...

perl -i -pe 's/,(?=\t|$)//g' file

ou

perl -i -pe 's/,(?!\S)//g' file

ou

Usando o limite não pertencente ao Word.

perl -i -pe 's/,\B//g' file
    
por 20.09.2015 / 06:11