Uso un sacco di grek awk sort nella mia shell unix per lavorare con file di testo di colonne separati da tab di medie dimensioni (circa 10M-100M). A questo proposito unix shell è il mio foglio di calcolo.
Ma ho un grosso problema, ovvero la selezione dei record con un elenco di ID.
Avendo table.csvfile con formato id\tfoo\tbar...e ids.csvfile con elenco di ID, seleziona solo i record table.csvcon ID presente in ids.csv.
tipo di /programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-ids ma con shell, non perl.
grep -Fproduce ovviamente falsi positivi se gli ID hanno una larghezza variabile.
joinè un'utilità che non avrei mai potuto capire. Prima di tutto, richiede un ordinamento alfabetico (i miei file sono in genere ordinati numericamente), ma anche in questo caso non riesco a farlo funzionare senza lamentarmi di un ordine errato e saltando alcuni record. Quindi non mi piace. grep -f contro il file con ^id\t-s è molto lento quando il numero di ID è grande.
awkè ingombrante.
Ci sono buone soluzioni per questo? Qualche strumento specifico per i file separati da tabulazione? Anche le funzionalità extra saranno le benvenute.
UPD: corretto sort->join
awk.
sortpuò fare tutti i tipi di ordinamento, numerico, alfabetico e altri. Vedere man sort.
grep -fè troppo lento, mantenere questa strategia suona come più problemi di quanti ne valga la pena - le variazioni probabilmente cadranno in preda agli stessi problemi di prestazioni O (N * M). Forse il tuo tempo sarebbe meglio se impari a usare un SQL DB normalizzato ...