Extração de dados do arquivo de texto

1

Eu tenho um arquivo de texto no seguinte formato: -

$DATA1 SOURCE='HSPICE' VERSION='I-2013.12-SP2-1 32-BIT'  
.TITLE 'cmos inverter transfer characteristics'  
index            t_r              t_f              t_rf              
                 t_fr             t_rr             t_ff              
                 temper           alter#            
1                 1.361e-11        1.177e-11        8.807e-12        
                  9.063e-12        2.002e-08        2.002e-08        
                  2.500e+01       1                 
2                 1.339e-11        1.178e-11        8.805e-12        
                  8.867e-12        2.002e-08        2.002e-08        
                  2.500e+01       1                 
3                 1.334e-11        1.177e-11        8.811e-12        
                  8.824e-12        2.002e-08        2.002e-08        
                  2.500e+01       1   

.  
.  
.  
1000 1.339e-11        1.178e-11        8.805e-12        
                  8.867e-12        2.002e-08        2.002e-08        
                  2.500e+01       1   

Desejo remover as primeiras 5 linhas e extrair os 9 valores numéricos do conjunto de três linhas, todas em 9 arquivos de saída diferentes usando o comando awk.
exemplo de arquivo de saída é: -
Arquivo1.txt

1  
2  
3  
.  
.  
1000  

arquivo2.txt

1.361e-11   
1.339e-11   
1.334e-11  
.  
.  
.  
1.339e-11

mesmo para todos os nove elementos em um conjunto de três linhas.

    
por Nilesh 24.05.2015 / 09:59

3 respostas

1

Aqui está uma solução awk pura:

awk '
  NR<=5 { next }
  { for(i=1; i<=NF; i++) print $i > "File"++c}
  NF==2 { c=0 }
'

Ele pula cinco linhas de cabeçalho, imprime os campos nos dados restantes em arquivos com nomes definidos por um contador, que é redefinido em linhas com apenas dois campos.

    
por 24.05.2015 / 14:13
0

Pode ser feito em awk , mas primeiro o que me vem à mente é sed + awk combo:

sed '1,5d;s/^\([[:digit:]]\)/\n/' file | 
awk 'BEGIN{RS="\n\n"}{for(i=1;i<=NF;i++){print $i > "file"i".txt"}}'

O ponto é adicionar (com sed ) nova linha a todas as linhas que começam em dígito e depois redefinir o separador de registro em awk .

    
por 24.05.2015 / 11:45
0

Aqui está outro sed plus tr plus printf :

tr -s '[:space:]' \n <infile |
sed "/^[0-9]/,${$(
    printf '\nw file%b\nn' \
           1 2 3 4 5 6 7 8 '9\n}\c'
)"

Eu o executei na minha área de transferência, conforme a saída de xsel em /tmp após copiar o seu exemplo para o buffer e depois fiz ...

head -n3 /tmp/file?

... que imprimiu ...

==> /tmp/file1 <==
1
2
3

==> /tmp/file2 <==
1.361e-11
1.339e-11
1.334e-11

==> /tmp/file3 <==
1.177e-11
1.178e-11
1.177e-11

==> /tmp/file4 <==
8.807e-12
8.805e-12
8.811e-12

==> /tmp/file5 <==
9.063e-12
8.867e-12
8.824e-12

==> /tmp/file6 <==
2.002e-08
2.002e-08
2.002e-08

==> /tmp/file7 <==
2.002e-08
2.002e-08
2.002e-08

==> /tmp/file8 <==
2.500e+01
2.500e+01
2.500e+01

==> /tmp/file9 <==
1
1
1
    
por 24.05.2015 / 12:45