Contar colunas CSV e remover

0

Eu tenho vários arquivos csv com o prefixo mv. Meu objetivo é remover uma coluna específica (nomeada ou por número) dos arquivos que contêm 5 colunas (mas não outras colunas).

for f in mv*.csv
do
    ln= $(echo "$f" | awk '{print NF}' | sort -nu | head -n 1)
    if [ln==4]
    then
        $(echo "$f" cut -d, -f2,4 --complement >> $f)
    fi
done

A terceira linha lança um erro "comando não encontrado", então nem cheguei a testar minha parte "cortada". O que estou perdendo?

PS - Eu ficarei feliz em entender o meu erro de conhecer o bash melhor, mas qualquer solução usando apenas sed / awk / python / qualquer outra coisa também seria ótima.

Obrigado

    
por Ozeuss 03.02.2017 / 13:16

2 respostas

1

Você passa o nome do arquivo para awk, mas deve passar seu conteúdo:

ln= $(cat "$f" | awk '{print NF}' | sort -nu | head -n 1)

ou melhor:

ln= $(awk '{print NF}' "$f" | sort -nu | head -n 1)
    
por 03.02.2017 / 14:18
2

Usando csvcut de csvkit :

$ csvcut -C 5 data.csv >data-new.csv

Isso removerá a coluna 5 de data.csv e salvará o resultado em data-new.csv .

$ csvcut -C "comment" data.csv >data-new.csv

Isso removerá a coluna chamada comment (de acordo com a linha de cabeçalho no arquivo) de data.csv e salvará o resultado em data-new.csv .

    
por 03.02.2017 / 14:25