Eu quero executar o comando cut para extrair algumas colunas de um arquivo grande e colá-lo em outro arquivo:

4

Eu quero extrair algumas colunas de um arquivo e colar em outro arquivo. Atualmente estou usando:

cat $Input_file | cut -f$Var_ColumnNo1,$Var_ColumnNo2,$Var_ColumnNo1 -d"," > $OUTPUT_file

mas esse comando demora muito em arquivos grandes (por exemplo, em um arquivo de 50 MB, demora cerca de 2 segundos) e torna meus scripts muito lentos, já que preciso executar essa operação várias vezes.

Existe algum método eficiente para fazer isso?

    
por NITIN RANJAN 24.12.2016 / 12:20

1 resposta

8

Não é verdade, não. cut é quase certamente a maneira mais rápida de fazer isso. Eu testei algumas alternativas em um arquivo de 157M e cut é claramente o mais rápido (a propósito, você não precisa de cat aqui):

$ time cut -f 2,6,8 -d ',' file > /dev/null 

real    0m0.859s
user    0m0.803s
sys     0m0.053s

$ time awk -F, '{print $2,$6,$8}'  file > /dev/null 

real    0m5.442s
user    0m5.317s
sys     0m0.050s

$ time perl -F, -lane 'print "@F[1,5,7]"' file > /dev/null 

real    0m6.065s
user    0m5.943s
sys     0m0.070s

Se você quiser acelerar as coisas, precisará alterar o que seu script está fazendo. Sugiro que você faça outra pergunta, inclua um exemplo do seu arquivo de entrada e explique qual é o seu objetivo final. Se você "precisar executar esta operação várias vezes", então certamente você está fazendo errado. Seu arquivo de entrada deve ser lido apenas uma vez, sempre que possível.

    
por 24.12.2016 / 12:50