Eu uso muita classificação grep awk no meu shell unix para trabalhar com arquivos de texto de coluna separados por tabulação de tamanho médio (em torno de 10M a 100M linhas). A esse respeito, o shell unix é minha planilha.
Mas eu tenho um grande problema, que é selecionar registros com uma lista de IDs.
Tendo table.csvarquivo com formato id\tfoo\tbar...e ids.csvarquivo com lista de IDs, selecione apenas os registros table.csvcom ID presente em ids.csv.
tipo /programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-ids mas com shell, não perl.
grep -Fobviamente produz falsos positivos se os IDs tiverem largura variável.
joiné um utilitário que eu nunca consegui descobrir. Antes de tudo, requer classificação alfabética (meus arquivos geralmente são numerados), mas mesmo assim não consigo fazê-lo funcionar sem reclamar de ordem incorreta e pular alguns registros. Então eu não gosto disso. grep -f no arquivo com ^id\t-s é muito lento quando o número de IDs é grande.
awké complicado.
Existem boas soluções para isso? Alguma ferramenta específica para arquivos separados por tabulação? Funcionalidades extras também serão bem-vindas.
UPD: corrigido sort->join
awk.
sortpode fazer todos os tipos de classificação, numéricos, alfabéticos e outros. Veja man sort.
grep -ffor muito lento, manter essa estratégia parecerá mais problemático do que vale a pena - as variações provavelmente serão afetadas pelos mesmos problemas de desempenho O (N * M). Talvez o seu tempo seria melhor gasto aprendendo a usar um normalizada SQL DB ...