Ho circa 2 TB di file di dati formattati come
12/20/2015 somerandomdata
12/20/2015 somerandomdata
12/20/2015 somerandomdata
12/20/2015 somerandomdata
12/21/2015 somerandomdata
12/21/2015 somerandomdata
12/21/2015 somerandomdata
12/21/2015 somerandomdata
12/22/2015 somerandomdata
12/22/2015 somerandomdata
12/22/2015 somerandomdata
12/22/2015 somerandomdata
e voglio tirare fuori certe date. Ad esempio, potrei voler generare i file per il 20/12/2015 e il 22/12/2015.
12/20/2015 somerandomdata
12/20/2015 somerandomdata
12/20/2015 somerandomdata
12/20/2015 somerandomdata
e
12/22/2015 somerandomdata
12/22/2015 somerandomdata
12/22/2015 somerandomdata
12/22/2015 somerandomdata
Potrei facilmente farlo con grep in Linux facendo grep '12/20/2015' filein > fileout20
e grep '12/22/2015' filein > fileout22
ma questo ha due problemi.
Innanzitutto e, cosa più importante, deve generare due volte il ciclo di input per generare l'output. Con 2 TB di dati e diverse date per file, questo è un problema significativo. (Correlato: inoltre, non voglio soluzioni che suddividono il file in ogni data possibile perché non voglio i dati dalla maggior parte delle date, solo circa il 10% da ogni file di input)
Il secondo problema è che devo eseguirlo su Windows. (Mi rendo conto che la maggior parte dei comandi di Linux hanno un equivalente di Windows usando GnuWin32 o simili, quindi questo non è un grosso problema)
Esistono modi per farlo in modo efficiente?
EDIT: Le risposte finora hanno uno dei due problemi, quindi chiarirò un po '. Il primo problema è che non voglio scorrere più di una volta ciascuno dei file di input. Quindi, avere un ciclo per scorrere attraverso ciascuna delle date non funzionerà. Questo perché se avessi 200 date e 8000 file, occorrerebbero 1.600.000 iterazioni.
Il secondo problema è che voglio dividere ciascuno dei file di output in un file per data.
Quindi, con 200 date e 8000 file, dovrebbero esserci 1.600.000 file, ma con solo 8000 iterazioni del comando di ricerca.
EDIT 2: ecco una soluzione con i comandi di Linux. Probabilmente finirò per usarlo solo se qualcuno ha un modo migliore
grep -f 12/20/2015 12/22/2015 filein1 > intermediate
awk -F, '{print > $1".out"}' intermediate
Questo è un processo in due fasi che prima filtra le date e poi divide il risultato in base alla data.