Linux: Altere a primeira linha do arquivo CSV para todas as maiúsculas

0

Eu tenho um conjunto de arquivos csv e, para cada arquivo, a primeira linha contém nomes de campo para um conjunto de dados. Alguns arquivos csv possuem letras maiúsculas para os nomes dos campos, outros possuem letras minúsculas para os nomes dos campos. Minha pergunta é como eu altero cada arquivo csv para que a primeira linha de cada arquivo (também conhecida como nomes de campo) seja exibida como todas as strings em maiúsculas em cada coluna?

Exemplos: Dataset1.csv

a b c
x x x

Dataset2.csv

A B C
y y y

Como faço para o Dataset1.csv se parecer com o seguinte?

A B C
x x x
    
por crayfishcray 09.02.2018 / 02:46

3 respostas

3

Isso pode ser feito com a opção Uppercase do GNU sed. No local com a opção -i :

sed -i '1s/.*/\U&/' Dataset1.csv
    
por 09.02.2018 / 04:03
1

Podemos fazer usando o awk e o GNU sed

Método1

awk 'NR==1{(i=toupper($0));print i}' Dataset1.csv ; awk 'NR >=2 {print $0}' Dataset1.csv

Saída

A B C
x x x
z z z

Método 2

sed '1s/.*/\U&/g' Dataset1.csv

Saída

A B C
x x x
z z z
    
por 09.02.2018 / 06:33
0

Este é um repost do stackoverflow desde que alguém me disse que a minha pergunta era off-topic para o site e recebi as seguintes respostas:

Considerando que seu arquivo termina com uma nova linha:

head -1 Dataset1.csv | tr '[:lower:]' '[:upper:]' > Dataset1_new.csv ; tail -$(( $(wc -l Dataset1.csv | cut -d ' ' -f 8) - 1 )) Dataset1.csv > Dataset1_new.csv

head -1 Dataset1.csv | tr '[:lower:]' '[:upper:]' : pega a primeira linha do seu arquivo e o transforma em maiúsculas & envia para o stdout

> Dataset1_new.csv : redireciona a saída para um novo arquivo chamado Dataset1_new.csv

tail -$(( $(wc -l Dataset1.csv | cut -d ' ' -f 8) - 1 )) Dataset1.csv: gera o resto das linhas

> Dataset1_new.csv: novamente, redireciona a saída para nosso arquivo Dataset1_new.csv

Você pode fazer isso com o GNU sed:

$ sed -i -e '1 s/\(.*\)/\U/' input.csv

Você também pode usar o awk para essa finalidade:

awk -i.bak 'NR==1{ print toupper($0) }NR>1' Dataset1.csv

Explicações:

o awk irá fazer um backup do seu arquivo csv e então para a primeira linha (NR == 1) irá mudar toda a linha $ 0 para maiúscula e então para o resto do arquivo (NR > 1) fará sua ação padrão está imprimindo a linha.

    
por 09.02.2018 / 02:50

Tags