Deseja imprimir um formato de tabela com várias linhas no shell scipt

0

Eu quero imprimir a linha em um formato de tabela usando sed ou awk ou qualquer outro em um script de shell.

exemplo

Line1
Line2
Line3
Line4

Line5
Line6
Line7
Line8

Saída desejada

Line1 Line2 Line3 Line4 
Line5 Line6 Line7 Line8
    
por user178492 06.07.2016 / 22:47

3 respostas

2

Se não houver linhas em branco separando grupos (conforme anterior edição mais recente da questão), em seguida, imprimir grupos de quatro linhas:

$ awk '{a=a (length(a)?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file
Line1 Line2 Line3 Line4
Line5 Line6 Line7 Line8

Se houver linhas em branco separando os grupos de linhas a serem impressas, então:

$ awk '{a=a (length(a)?OFS:"") $0} !length($0){print a; a=""} END{print a}' file
Line1 Line2 Line3 Line4 
Line5 Line6 Line7 Line8
    
por 06.07.2016 / 23:02
0

Se as linhas não tiverem o mesmo tamanho,

  • comece com uma das respostas apresentadas até agora,
  • modifique-o, conforme necessário, para separar as colunas com guias (isso pressupõe que não haja guias nos dados) e
  • canaliza a saída através de column -t -s$'\t'

Por exemplo (assumindo que não há linhas separadoras em branco):

$ cat file178492
The
quick
brown
fox
jumps over
the
lazy
dog.
$ paste - - - - < file178492
The     quick   brown   fox
jumps over      the     lazy    dog.
                    # paste separates output columns with tabs by default.
$ paste - - - - < file178492 | column -t -s$'\t'
The         quick  brown  fox
jumps over  the    lazy   dog.
$ awk '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file178492
The quick brown fox
jumps over the lazy dog.
                    # specify  -vOFS=$'\t'  to awk to separate output fields with tabs.
$ awk -vOFS=$'\t' '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file178492
The     quick   brown   fox
jumps over      the     lazy    dog.
$ awk -vOFS=$'\t' '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file178492 | column -t -s$'\t'
The         quick  brown  fox
jumps over  the    lazy   dog.

Notas:

  • $'…' é uma base que permite inserir caracteres de controle nos comandos de uma forma inequivocamente visível e independente do dispositivo. $'\t' especifica um caractere de tabulação. Se você não estiver usando o bash, e $'\t' não funcionar para você, tente apenas digitar Tab ou Ctrl + V , separador . (Se isso não funcionar, tente Ctrl + I ou Ctrl + V , Ctrl + I .
  • Se você quiser que suas colunas sejam separadas por mais espaço. adicione -o' ' ao comando column :
$ paste - - - - < file178492 | column -t -s$'\t' -o'    '
The           quick    brown    fox
jumps over    the      lazy     dog.
    
por 07.07.2016 / 05:01
0

Supondo que você queira apenas imprimir as seções agrupadas em uma única linha, este script awk básico deve fazer isso.

awk 'BEGIN{RS=""}{gsub("\n"," ");print}' test.txt
    
por 07.07.2016 / 23:24