Corte a cada 100 colunas do csv

2

Eu tenho um arquivo de dados de números separados por guias, como este

1 2 3 4
2 4 6 8

Meu arquivo real tem 50000 colunas de largura e eu só preciso de cada 100 coluna (coluna 100, 200, 300, 400, ...). Agora gostaria de remover todas as outras colunas.

Como posso fazer isso?

    
por Blub Bla 16.09.2015 / 15:36

2 respostas

2

É para isso que awk :

awk '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' file > output

Ou, se você pode ter espaços dentro de seus campos, especifique a guia como o separador de campo:

awk -F'\t' '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' file > output

Como alternativa, você pode usar o Perl:

perl -ane 'for($i=99;$i<=$#F;$i+=100){print "$F[$i] "}' file > output

Para fazer isso com vários arquivos, você pode usar um loop de shell (supondo que você queira executar isso em todos os arquivos no diretório atual):

for f in *; do
  awk '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' "$f" > "$f".new;
done
    
por 16.09.2015 / 15:50
0

Embora eu não saiba se é apropriado com arquivos grandes, você pode fazer isso com cut :

cut -d " " -f -100 < [your file]
    
por 16.09.2015 / 15:50