Reduz o comprimento da coluna específica no arquivo de texto delimitado

1

Eu preciso que a quinta coluna em um arquivo de texto delimitado seja reduzida para apenas os 5 primeiros caracteres. Todas as outras colunas devem permanecer sem edição.

Entrada:

file1.txt    column1      column2      column3     column4      column5
123456789    123456789    123456789   123456789    123456789

Gostaria que a saída se parecesse com:

output.txt    column1      column2      column3     column4      column5
123456789    123456789    123456789   123456789    12345

Observação: por acaso, uso vírgulas como delimitador.

    
por cmart2112 11.11.2014 / 15:35

3 respostas

2

Se file.csv for assim:

123456789,123456789,123456789,123456789,123456789
123456789,123456789,123456789,123456789,223456789
123456789,123456789,123456789,123456789,323456789
123456789,123456789,123456789,123456789,423456789

Então, você pode fazer:

$ awk -F, '{print $1","$2","$3","$4","substr($5,1,5) }' file.csv
123456789,123456789,123456789,123456789,12345
123456789,123456789,123456789,123456789,22345
123456789,123456789,123456789,123456789,32345
123456789,123456789,123456789,123456789,42345
    
por 11.11.2014 / 15:56
1

Se todos os valores forem simples (sem citações e novas linhas em um valor) e se forem separados por vírgulas, como:

123456789,123456789,123456789,123456789,123456789

e se sempre houver 5 desses valores em uma linha, você poderá usar sed :

sed '2,$s/\(.*\),\(.*\),\(.*\),\(.*\),\(.....\)\(.*\)/,,,,/' input

O 2,$ assume que você tem um cabeçalho separado por vírgula (e que seu quinta coluna não deve ser truncada), se não for o caso, deixe de fora.

    
por 11.11.2014 / 15:51
1

Ou awk :

Para delimitado por espaços em branco:

awk 'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'

Para delimitado por vírgulas:

awk 'BEGIN {FS=","} NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'

Para uma divisão de CSV um pouco melhor e assumindo o GNU awk:

awk -vFPAT='[^,]*|"[^"]*"'  'NR==1 { print; next} {print $1, $2, $3, $4, substr($5,1,5)}'
    
por 11.11.2014 / 16:19