Reorganizando linhas em um arquivo de texto

1

Então eu tenho o seguinte arquivo:

First Line
Second Line 
Third Line
3 0.374
2 0.777
1 0.245
Fourth Line
4 0.687
...

E quero reorganizá-lo para que as linhas que começam com um int sejam anexadas à linha que int se refere a:

First Line 0.245
Second Line 0.777
Third Line 0.374
Fourth Line 0.687
...
    
por Msegade 04.03.2016 / 13:14

2 respostas

3

Com POSIX awk :

awk '$1 in a {print a[$1], $0; next}; {a[++l] = $0}' <file

Observe que a saída não está classificada e será perdida se a linha int aparecer antes da linha indicada.

Com gawk ou bwk-awk , você imprime a saída classificada facilmente:

gawk '
  $1 in a { a[$1] = a[$1] " " $0; next }
  { a[++l] = $0 }
  END { for (i = 1; i <= length(a); i++) print a[i] }
' <file

Com outras implementações awk , você precisa escrever sua própria função para classificar o índice da matriz.

Isso também mantém todo o conteúdo do arquivo na memória.

    
por 04.03.2016 / 13:27
1

A solução abaixo fornece uma saída ordenada sem a necessidade de usar nenhum recurso de classificação:

$1 ~ "[0-9]" {
    line[$1] = $2;
    next;
}
{
    aux[++k] = $0;
}
END {
    for(i = 1; i <= k; i++)
        print aux[i], line[i];
}

Saída:

First Line 0.245
Second Line  0.777
Third Line 0.374
Fourth Line 0.687

Se você quiser uma impressão bem formatada, use apenas printf .

    
por 04.03.2016 / 23:08