Colocar uma nova linha sempre que corresponder ao terceiro espaço

1

Eu tenho um dado parecido com isto:

 8.620 -9.182 1.758 8.786 -8.249 -0.495 8.614 -9.652 -1.158 9.446 -9.278 
  0.350 11.450 -7.809 0.887 10.638 -9.000 2.070 11.179 -10.871 -1.200 7.583  
 -10.330 0.400 7.079 -9.330 -1.014 6.745 -11.702 0.004 11.610 -12.260 -1.101   
12.381 -13.783 - 

Eu quero fazer três linhas de coluna, então, sempre que corresponder a um terceiro espaço, imprima uma nova linha. Existe algum comando bash que eu possa usar ou como dentro do script perl eu posso mudá-lo. Este não é um arquivo, eu dividi as linhas de acordo com o espaço, peguei o elemento [6,7,8] e empurrei esses elementos para um array. Quando imprimo o array, ele parece desorganizado.

Esta é a parte do script:

if ($file_each[$line]=~/^ATOM/)
                {
            $file_each[$line]=~s/^ATOM//;
                    @os=split '\s+', $file_each[$line];
            chomp @os[6,7,8];
            push @coord, @os [6,7,8];
            print "@coord\n";
            }

É assim que o resultado deve ser:

8.620 -9.182 1.758  
8.786 -8.249 -0.495  
8.614 -9.652 -1.158 
    
por djordje 08.01.2018 / 02:57

1 resposta

0

Se uma string $line contiver seus números, tente:

$line =~ s/(.*?\d +.*?\d .*?\d) +/$1\n/g;

Podemos tentar de um arquivo com

perl -pe 's/(.*?\d +.*?\d .*?\d) +/$1\n/g' ex
    
por JJoao 03.03.2018 / 18:18