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)
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
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
.
Tags bash csv shell-script