Come trasformare un CSV per combinare le righe corrispondenti?


0

Ho un file CSV con alcuni dati di transazione. Diciamo data, volume, prezzo e direzione (vendere / acquistare). Inoltre c'è un ID per ogni transazione e su ogni transazione di chiusura (quella più recente) c'è un riferimento alla transazione corrispondente. Riferimenti classici al database.

Ora voglio fare delle statistiche e disegnare delle trame. Questo potrebbe essere fatto tramite Octave, LaTeX / TikZ, Gnuplot o qualsiasi altra cosa. Per fare questo ho bisogno sia di comprare che di vendere il prezzo in una riga. Il mio pensiero era di pre-elaborare il CSV per ottenere un altro CSV contenente le informazioni necessarie e poi per fare le statistiche. Alla fine mi piacerebbe avere una soluzione basata su script e non su un foglio di calcolo in quanto i dati potrebbero cambiare spesso (esportati dal DB online).

La mia soluzione reale (vedi http://paste.ubuntu.com/6262822/ ) è uno script bash che analizza il CSV riga per riga e verifica se esiste una transazione corrispondente. Se trovato, una nuova riga viene scritta nel CSV di destinazione. Se non viene stampato un avvertimento.

Le cattive notizie: per ogni riga del file sorgente devo leggere l'intero file alcune volte. Ciò causa lunghi tempi di esecuzione di 10 secondi per 300 linee. Dato che il numero di riga potrebbe aumentare presto (& gt; 10k linee), questo non è perfetto. Sono consapevole che ci sono molte shell da aprire nello script che potrebbero causare problemi di prestazioni.

Ora le mie domande:

  • Bash / awk / sed / .... un buon modo per fare le cose?
  • Dovrei prima importare tutti i dati in un database locale "reale" per usare SQL?
  • C'è un modo semplice per ottenere i risultati desiderati?

1
Sembra un caso perfetto per MS Access per me (o MySQL)
Brian Adkins

MS non è possibile in quanto sto usando una linux box pura. Anche se MySQL (o simili) è piuttosto un'opzione. Grazie
Christian Wolf

Risposte:


0

In effetti, ho risolto il problema utilizzando PostgreSQL (era già disponibile sul portatile). Ho aggiunto i dati tramite \copy in una tabella temporanea e ha fatto alcune viste, seleziona ecc. Alla fine tutto (caricamento dei dati, creazione di più file di output e tabelle pivot) richiede meno di mezzo secondo. Perfezionare.

Grazie.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.