curto equivalente 'csvgrep' como função drop-in do bash

0

Pergunta: Boas substituições "drop-in" para encontrar algumas linhas de arquivos csv contendo algumas palavras-chave em alguns coluna.

Requisito: suporte a arquivos csv mais complexos - que possuem aspas duplas, novas linhas.

Usecase: "csvkit" é incrível, mas pode ser demais apenas para algumas linhas.

Existe um csvkit muito bom para trabalhar com csv , que incluem csvgrep . Mas às vezes, o ambiente para o qual estamos escrevendo script não tem csvkit isntalled e instalar / compilar tudo pode ser um exagero por apenas algumas linhas de arquivo csv .

    
por Grzegorz Wierzowiecki 12.10.2016 / 22:37

1 resposta

0

  • -1: requer python2
  • +1: o python2 é mais comum que o csvkit

função drop-in do bash:

function csvgrep(){
grep_criteria="$1"
matchcolumn="$2"
python2 -c "import csv, sys
rows = list(csv.reader(sys.stdin))
writer = csv.writer(sys.stdout)
writer.writerow(rows[0])
for row in rows[1:]:
  if row[${matchcolumn}] == '${grep_criteria}':
    writer.writerow(row)"
}

Uso:

csvgrep 'valueInLastColumn' '-1' < in.csv > out.csv
    
por 12.10.2016 / 22:39

Tags