Como posso alinhar colunas e inverter o último campo em uma tabela de biologia desarrumada?

0

Eu tenho uma tabela que foi gerada e os números ficaram confusos:

0.967662 0.850492  0.935517 325969
1.071937  0.976805 1.086638      526410.1
0.972091    0.871967     0.950352      306079
1.048607  0.925483  1.008793        412640.1
1.002087       0.888653   0.977475      188199
1.147052  1.029975       1.126825 285331.1
1.062427      0.960176      1.040016 282640.1
1.019481 0.886356 0.974687  980210.1
0.973101  0.857897 0.929414 588859

Não só isso, os números na última coluna foram invertidos. Por exemplo, 325969.0 deve, na verdade, ser 0.969523 .

O resultado deve ser assim:

0.967662 0.850492 0.935517 969523
1.071937 0.976805 1.086638 1.014625
0.972091 0.871967 0.950352 970603
1.048607 0.925483 1.008793 1.046214
1.002087 0.888653 0.977475 991881
1.147052 1.029975 1.126825 1.133582
1.062427 0.960176 1.040016 1.046282
1.019481 0.886356 0.974687 1.012089
0.973101 0.857897 0.929414 958885

Como isso pode ser corrigido?

    
por Jeff Schaller 09.10.2018 / 18:32

3 respostas

2
perl -lane '$n = reverse pop @F; print join " ", @F, $n' file
0.967662 0.850492 0.935517 969523
1.071937 0.976805 1.086638 1.014625
0.972091 0.871967 0.950352 970603
1.048607 0.925483 1.008793 1.046214
1.002087 0.888653 0.977475 991881
1.147052 1.029975 1.126825 1.133582
1.062427 0.960176 1.040016 1.046282
1.019481 0.886356 0.974687 1.012089
0.973101 0.857897 0.929414 958885
    
por 09.10.2018 / 18:51
2

Usando o awk, com uma função auxiliar para reverter o único campo:

function reverse(str) {
  trs=""
  for(i=length(str); i > 0; i--) {
    trs=trs substr(str, i, 1);
  }
  return trs
}
{
  $4=reverse($4);
  print;
}

Salve isso em um arquivo e execute: awk -f that-file-above < input > output .

Na sua entrada de amostra, isso resulta em:

0.967662 0.850492 0.935517 969523
1.071937 0.976805 1.086638 1.014625
0.972091 0.871967 0.950352 970603
1.048607 0.925483 1.008793 1.046214
1.002087 0.888653 0.977475 991881
1.147052 1.029975 1.126825 1.133582
1.062427 0.960176 1.040016 1.046282
1.019481 0.886356 0.974687 1.012089
0.973101 0.857897 0.929414 958885
    
por 09.10.2018 / 18:53
0
#!/bin/bash
var=$(cat file | column -t | cut -d ' ' -f 7 | rev)

var1=$(cat file | awk '{print $1, $2, $3}')

paste <(echo "$var1") <(echo "$var") --delimiters ' '

Observação: isso manipula os dados que você colou no texto da pergunta, que podem ser diferentes dos que você tem nos documentos originais. Por favor, ajuste o número de colunas (nos comandos awk e cut ) de acordo com seus dados.

    
por 09.10.2018 / 18:37