Como usar o awk ou sed para converter linhas em colunas

3

Eu preciso transpor um arquivo.

Arquivo de entrada:

1/1/1111
1
2
3
4

2/2/2222
5
6
7
8

Saída:

1/1/1111 1 2 3 4
2/2/2222 5 6 7 8
    
por dynix 12.08.2015 / 06:44

5 respostas

2

com sed :

$ sed -e '
  :1
  $!N
  /\n$/{
    P
    d
  }
  s/\n/ /
  t1
' <file
    
por 12.08.2015 / 07:13
3

Em perl

perl -lp00e 's/\n/ /g' your_file

Explicação

  • l : remova o separador de registro de entrada do registro atual que está sendo processado e adicione o separador de registro de saída atual (uma nova linha por padrão) após cada linha impressa.
  • -p : opera no registro do arquivo por registro e imprime o registro atual após o processamento.
  • -00 : Significa que o separador de registro é duas ou mais novas linhas consecutivas
  • -e : execute a seguinte string como código enquanto configura a variável padrão ( $_ ) para o registro atualmente sendo lido do arquivo.
  • s/\n/ /g : Substitua cada nova linha encontrada no registro atual por um espaço (o modificador g garante que a substituição seja "global").
por 12.08.2015 / 07:45
2

são todos do mesmo formato, ou seja, 6 linhas para cada bloco? se assim for, paste é o mais simples (ou seja, 6 traços):

paste - - - - - - < file

Se você precisar de espaços em vez de guias, adicione -d' '

    
por 12.08.2015 / 10:45
1

com awk :

awk '{ORS=" ";}; !NF{ORS="\n"};1' file

A variável ORS especifica o separador de registros de saída . Se o número de campos for zero (a linha está vazia), o separador de registro deve ser uma nova linha, senão um espaço. O 1 no final significa apenas uma condição positiva, então awk imprime toda a linha.

    
por 12.08.2015 / 07:44
1

e xargs

 xargs -n5 < input_file

ou awk

awk '{a=(NR%6==0)?"":a$0" ";if(NR%6==5)print a}' inp
    
por 12.08.2015 / 08:01