Como mesclar saída de várias linhas para formar uma única linha?

1

Eu quero juntar uma saída de linha diferente a uma única linha como abaixo.

$ cat new.txt | grep Full |  awk '{print $1}' 
09/01/2018
08/25/2018
08/18/2018
08/11/2018
08/04/2018
07/28/2018
07/21/2018

Eu quero juntar a saída acima a uma única linha como

09/01/2018,08/25/2018

etc.

    
por Varun 01.09.2018 / 11:59

2 respostas

1
tr '\n' ',' | sed 's/,$/\n/'

tr substitui cada caractere de nova linha por , , incluindo o último (após 07/21/2018 ). Então sed substitui , no final com uma nova linha para formar uma linha compatível com POSIX sem arrastar , .

Observe que sed é uma ferramenta de processamento de texto que, por padrão, trabalha com uma linha por vez. O que quer que deixe tr é uma única linha; pode ser muito longo, dependendo da sua entrada, e sed pode não ser mais a melhor ferramenta para lidar com isso.

Eu reconsideraria a ideia de ter todos os resultados em uma única linha, apenas para evitar esse cenário. Existem maneiras de substituir este sed específico por uma ferramenta que trabalha com bytes (não linhas). Mas mesmo se você fizer isso aqui, você ainda terá uma linha potencialmente longa, o que é inconveniente para analisar depois.

OK, se você realmente precisa fazer isso, use o seguinte comando para criar uma linha arbitrariamente grande. Toda a análise é feita com ferramentas operando em bytes:

head -c -1 | tr '\n' ',' && printf '\n'

head retira o último caractere, assumimos cegamente que é uma nova linha; tr altera todas as novas linhas restantes em , caracteres; printf adiciona uma nova linha à direita para tornar seu resultado uma linha compatível com POSIX.

    
por 01.09.2018 / 12:37
2

Você deseja paste .

cat new.txt | grep Full |  awk '{print $1}' | paste -s -d,

Além disso, o awk pode fazer o que o gato e o grep podem fazer, então

awk '/Full/ {print $1}' new.txt | paste -s -d,

Além disso, o awk pode formatar sua saída, mas é menos legível:

awk '/Full/ {printf "%s%s", (NR == 1 ? "" : ","), $1} END {print ""}' new.txt
    
por 01.09.2018 / 17:16

Tags