Uma maneira seria usar awk
e paste
:
paste -sd'\t' <(awk 'NR%2' inputfile) <(awk '!(NR%2)' inputfile)
A ideia é obter linhas pares e ímpares separadamente e paste
.
Para sua entrada, produziria:
1 2 5 6
3 4 7 8
Eu gostaria de marcar minha impressão:
1 2
3 4
5 6
7 8
para
1 2 5 6
3 4 7 8
Como ajustá-lo usando uma linha de comando simples ( awk
ou sed
) ??
Uma maneira seria usar awk
e paste
:
paste -sd'\t' <(awk 'NR%2' inputfile) <(awk '!(NR%2)' inputfile)
A ideia é obter linhas pares e ímpares separadamente e paste
.
Para sua entrada, produziria:
1 2 5 6
3 4 7 8
com sed
:
sed 'N;N;N;s/\n\(.*\)\n\(.*\n\)/ /'
Aqui está outra maneira com awk
:
$ cat file
1 2
3 4
5 6
7 8
$ awk 'NR%2 { even[++x] = even[x] ? even[x] FS $0 : $0 ; next }
{ odd[++y] = odd[y] ? odd[y] FS $0 : $0 }
END { printf "%s\n%s\n", even[x], odd[y] }' file
1 2 5 6
3 4 7 8
Aqui está um jeito Perl:
perl -ne 's/\n/ / if $.%2!=0; print' file
Ele simplesmente substitui o caractere de gráfico de nova linha ( \n
) por um espaço em linhas ímpares. Executar nos seus dados, produz:
$ perl -ne 's/\n/ / if $.%2!=0; print' file
1 2 3 4
5 6 7 8
Solução na linguagem TXR :
Ingênuo:
@(repeat) @a @b @c @d @e @f @g @h @(output) @a @b @e @f @c @d @g @h @(end) @(end)
Executar:
$ txr reshape.txr - 1 2 3 4 5 6 7 8 1 2 5 6 3 4 7 8 A B C D E F G H A B E F C D G H
Problema: consome dados que não têm a "forma" correta. Esta versão recai sobre consumir e imprimir uma linha se não houver correspondência para a forma de bloco de oito elementos que está sendo transformada.
@(repeat) @ (cases) @a @b @c @d @e @f @g @h @ (output) @a @b @e @f @c @d @g @h @ (end) @ (or) @line @ (do (put-line line)) @ (end) @(end)
$ cat data foo a l m o s t ! # $ % ^ * ( @ + bar $ txr reshape8.txr data foo a l m o s t ! # $ * ( % ^ @ + bar
Apenas no caso de a questão realmente significar que pares consecutivos de linhas são feitos adjacentes, o código seria modificado assim:
@(repeat) @ (cases) @a @b @ (output) @a @b @ (end) @ (or) @line @ (do (put-line line)) @ (end) @(end)
Tags text-processing awk columns