com sed
:
$ sed -e '
:1
$!N
/\n$/{
P
d
}
s/\n/ /
t1
' <file
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
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"). 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' '
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.
e xargs
xargs -n5 < input_file
ou awk
awk '{a=(NR%6==0)?"":a$0" ";if(NR%6==5)print a}' inp
Tags text-processing awk sed