awk -F, '{print $2}' file.csv extrai uma coluna em uma linha, e para um CSV gerado por máquina a história termina aí. Para um CSV que veio de uma planilha existe uma armadilha que produz números errados em vez de erros — por isso vale saber onde fica o limite.
1. Uma coluna
$ clai imprime a primeira coluna de data.csv→ awk -F, '{print $1}' data.csvnameAliceBob
-F, define o separador de campos. Os campos são $1, $2, … e $0 é a linha inteira.
2. Várias colunas, pulando o cabeçalho
$ clai imprime as colunas 1 e 3 de data.csv sem a linha de cabeçalho→ awk -F, 'NR>1 {print $1, $3}' data.csvAlice 100Bob 250
NR>1 pula a primeira linha. NR é o número do registro, e usá-lo como condição é como o awk expressa «para as linhas onde…».
3. Manter separado por vírgulas na saída
$ clai extrai as colunas 1 e 3 como csv válido→ awk -F, 'BEGIN{OFS=","} NR>1 {print $1,$3}' data.csvAlice,100Bob,250
print $1, $3 une os campos com OFS, que por padrão é um espaço. Defina-o em BEGIN e a saída volta a ser CSV.
4. Somar uma coluna
$ clai soma a terceira coluna de data.csv→ awk -F, 'NR>1 {s+=$3} END {print "total", s}' data.csvtotal 350
Sem declarar variável, sem inicializar — no awk os números começam em zero. END roda uma vez, depois da última linha.
5. Filtrar linhas e depois pegar uma coluna
$ clai mostra os nomes onde o valor é maior que 200→ awk -F, 'NR>1 && $3 > 200 {print $1}' data.csvBob
É aqui que o awk vence a planilha: o mesmo one-liner percorre um arquivo de 3 GB sem precisar abri-lo.
6. A armadilha: uma vírgula dentro de um campo entre aspas
$ clai imprime a segunda coluna→ awk -F, 'NR>1 {print $2}' data.csvBerlin"Paris
A linha Bob,"Paris, France",250 tem três campos lógicos, mas quatro vírgulas. O awk não sabe nada sobre aspas, então $2 vira "Paris, $3 vira France", e a soma do passo 4 devolve silenciosamente 100 em vez de 350. Não dá erro — só te dá o número errado.
Pegadinhas
- Verifique se há aspas antes de confiar em um total.
grep -c '"' file.csv— se for zero, o awk simples é seguro. Se não for, use um parser de CSV de verdade:csvcut -c 1,3 data.csv(csvkit),mlr --csv cut -f name,amount(Miller), ou três linhas de Python. -F,não é o mesmo que-F', '. Um separador de vírgula-mais-espaço produz campos vazios silenciosamente em linhas sem esse espaço.- Quebras de linha do Windows deixam um
\rno último campo.$NFdeixa de bater sem nenhum motivo visível. Corrige-se comawk -F, '{gsub(/\r$/,"")} …'ou rodandodos2unixantes.
Perguntas relacionadas
Como imprimo a última coluna? awk -F, '{print $NF}'. NF é o número de campos, então $NF é o último e $(NF-1) o anterior.
Como uso um separador de tabulação? awk -F'\t' — entre aspas para o shell não engolir a barra invertida.
O awk é mais rápido que o pandas pra isso? Para extrair ou somar uma coluna de um arquivo grande, sim, e muito — ele processa em streaming e nunca monta uma estrutura de dados. Para joins ou reestruturação, use pandas.
Veja também
- Buscar e substituir em todos os arquivos de um projeto
- Renomear centenas de arquivos: de loops
fora linguagem natural - De one-liner a script versionado: quando vale a pena
Descreva a extração que você quer; o CliAI escreve o programa awk, incluindo o BEGIN{OFS=","} que você esqueceria. Instale em uma linha.