Como filtrar e exportar dados de um CSV em PowerShell
Receber um ficheiro CSV com centenas ou milhares de linhas e precisar apenas de uma parte dos dados é uma tarefa diária em qualquer equipa de dados. Com o PowerShell consegues filtrar e exportar um CSV em poucos segundos, de forma repetível e sem abrir o Excel. Este guia mostra, passo a passo, como ler um ficheiro CSV, aplicar filtros às linhas e gravar apenas os dados que interessam num novo ficheiro.
Pré-requisitos
- Windows PowerShell 5.1 ou PowerShell 7 (ambos servem; para verificar, corre
$PSVersionTable.PSVersion). - Um ficheiro CSV com cabeçalho na primeira linha. Vamos usar um exemplo chamado
vendas.csv. - Conhecimentos básicos de linha de comandos (abrir um terminal e navegar entre pastas).
Para acompanhar o exemplo, cria um ficheiro vendas.csv com este conteúdo:
Data,Produto,Regiao,Quantidade
2026-01-04,Teclado,Norte,12
2026-01-05,Rato,Sul,4
2026-01-06,Monitor,Norte,25
2026-01-07,Teclado,Centro,8
2026-01-08,Monitor,Norte,3
Passo 1: Ler o CSV com Import-Csv
O primeiro passo para filtrar e exportar um CSV em PowerShell é carregá-lo para memória. O cmdlet Import-Csv lê o ficheiro e transforma cada linha num objeto, usando o cabeçalho como nomes das colunas.
$dados = Import-Csv -Path ".\vendas.csv"
$dados | Format-Table
Se o teu ficheiro usar ponto e vírgula como separador (comum em CSV exportados em Portugal), indica-o com o parâmetro -Delimiter:
$dados = Import-Csv -Path ".\vendas.csv" -Delimiter ";"
Passo 2: Filtrar as linhas com Where-Object
Agora vamos filtrar apenas as linhas que interessam. O Where-Object percorre cada objeto e mantém os que cumprem a condição. Neste exemplo queremos apenas as vendas da região Norte com quantidade igual ou superior a 10.
$filtrado = $dados | Where-Object {
$_.Regiao -eq "Norte" -and [int]$_.Quantidade -ge 10
}
$filtrado | Format-Table
Repara no [int] antes de $_.Quantidade. Como o Import-Csv lê todos os valores como texto, é preciso convertê-los para número antes de comparar. Sem essa conversão, "3" seria considerado maior do que "25", porque a comparação seria feita como texto.
Podes combinar várias condições com -and (todas têm de ser verdadeiras) ou -or (basta uma ser). Assim adaptas o filtro a qualquer critério de negócio.
Passo 3: Escolher e ordenar as colunas
Antes de exportar, podes escolher que colunas manter e por que ordem apresentar os dados. O Select-Object seleciona colunas e o Sort-Object ordena os resultados, por exemplo pela quantidade de forma decrescente.
$resultado = $filtrado |
Sort-Object { [int]$_.Quantidade } -Descending |
Select-Object Data, Produto, Quantidade
Passo 4: Exportar para um novo CSV com Export-Csv
Por fim, gravamos o resultado num novo ficheiro. O Export-Csv faz o inverso do Import-Csv: transforma os objetos de volta em linhas de texto. Usa -NoTypeInformation para não escrever uma linha extra de metadados e -Encoding UTF8 para manter os acentos corretos.
$resultado | Export-Csv -Path ".\vendas_norte.csv" -NoTypeInformation -Encoding UTF8
Se precisares do resultado com ponto e vírgula (para abrir diretamente no Excel português), acrescenta -Delimiter ";".
Dica: guarda sempre o resultado num ficheiro novo em vez de escrever por cima do original. Assim, se o filtro estiver errado, não perdes os dados de partida.
Verificar o resultado
Para confirmar que o ficheiro ficou correto, volta a lê-lo com o PowerShell ou vê as primeiras linhas:
Import-Csv ".\vendas_norte.csv" | Format-Table
Get-Content ".\vendas_norte.csv" -TotalCount 5
Deves ver apenas as duas linhas da região Norte com quantidade igual ou superior a 10 (Monitor com 25 e Teclado com 12), ordenadas da maior para a menor quantidade. Se o número de linhas bater certo, o filtro funcionou.
Conclusão
Com apenas três cmdlets — Import-Csv, Where-Object e Export-Csv — automatizaste uma tarefa que, feita à mão no Excel, demoraria muito mais e seria difícil de repetir. O próximo passo é guardar estes comandos num ficheiro .ps1 para os reutilizares sempre que receberes um novo ficheiro. Que outro filtro seria útil no teu dia a dia: por data, por produto, ou por um valor mínimo de vendas?