Bash: converte uma coluna de texto em uma linha

Suponha que temos um arquivo de texto chamado distros.txt com o seguinte:

archlinux
debian
ubuntu
kaos
fedora
slackware
gentoo

E queremos transformá-lo em:

archlinux debian ubuntu kaos fedora slackware gentoo

Para conseguir isso, usaremos um para loop e um eco -n :

for i in `< distros.txt`; do echo -n ${i}" ";done; echo ""

Feito, isso resolve 🙂

Isso nos mostrará o resultado desejado no terminal, se por outro lado queremos que seja salvo em outro arquivo .txt redirecionamos a saída:

for i in `< distros.txt`; do echo -n ${i}" ";done; echo "" > distros-nuevas.txt

E voila 🙂

Bem, nada, espero que seja útil. Válido para esclarecer que também pode ser feito com expressões regulares, só não sei como ... mas, com expressões regulares você pode fazer quase tudo hahaha.


O conteúdo do artigo segue nossos princípios de Ética editorial. Para relatar um erro, clique Clique aqui.

15 comentários, deixe o seu

Deixe um comentário

Seu endereço de email não será publicado.

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   José Ricardo dito

    mais fácil:

    cat distribuições.txt | xargs -n 100

  2.   ¿ dito

    Se em um .odt eu tiver 2 colunas em cada página, elas serão assim:

    p. 1
    col.1 col.2
    p. 2
    col.3 col.4
    etc.

    Como faço para colocar cada coluna abaixo da outra?
    col.1
    col.2
    col.3
    col.4
    etc.

  3.   Juant dito

    Muito facil:

    Se você quiser separar por tabulações:
    Você escreve: paste -s distros.txt
    Você obtém: archlinux debian ubuntu kaos fedora slackware gentoo

    Se você quiser separado por espaços:
    Você escreve: paste -s -d »» distros.txt
    Você obtém: archlinux debian ubuntu kaos fedora slackware gentoo

    Se você quiser separá-lo por vírgulas:
    Você escreve: paste -s -d, distros.txt
    Você obtém: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    Com paste, cat, awk e outros amigos, com um pouco de engenhosidade você pode fazer muitas combinações úteis sem complicar sua vida.

    Que continue tudo bem, parabéns pela premiação no Portalprogramas!

    1.    caçador dito

      Tenho usado sed, awk, cut, sort, uniq, enfim o cream, mas nunca prestei atenção em colar, obrigado por mostrar o que ela pode fazer. Slds.

  4.   Tabris dito

    cat arquivo.txt | xargs

    lucro.

  5.   Cristianhcd dito

    Eu sempre acabo usando o excel para isso [transpor] ... muito útil

  6.   Bruno cascio dito

    Outra variante:

    cat distros.txt | tr «\ n» »«

  7.   Joaquin dito

    HaHaHa em cada comentário, uma forma diferente de fazer o mesmo!

  8.   Jose GDF dito

    E para fazer o contrário, como seria? Ou seja, converter uma linha de palavras separadas por espaços em uma coluna.

    1.    Juant dito

      Fácil também, desta vez com awk.
      Supondo que os campos estejam separados por tabulações ou espaços, que é o mais comum (se for por vírgulas ou outra coisa, deve ser levado em consideração e indicado), e que o arquivo agora contém: archlinux debian ubuntu kaos fedora slackware gentoo

      Como o awk nos fornece diretamente o campo que queremos, temos que fazer com que ele nos mostre iterativamente um por um até o final. São 7 campos porque este é o valor da NF (Número de campos). Ajustamos o contador i = 1, para que ele nos mostre o primeiro campo ($ 1) e temos que fazer com que ele aumente em uma unidade (usando i ++) sem exceder o último campo (NF).

      awk '{for (i = 1; i <= NF; i ++) {print $ i}}' distros.txt

      1.    Etemenanki dito

        A forma mais prática, fácil de lembrar e que funciona para os dois sentidos é esta:
        cat distros.txt | tr '\ n' '' ← Saída horizontal stdout (já discutido acima)
        cat distros.txt | tr '' '\ n' ← Saída vertical stdout

        Saudações!

    2.    Juant dito

      Definitivamente, a solução de Etemenanki, nos dois sentidos, é boa se você estiver interessado apenas em uma simples transformação de linha para coluna e vice-versa.

    3.    Jose GDF dito

      Obrigado a todos por responder. Vou colocá-los em prática no próximo script que fizer.

      Saudações.

  9.   Gato dito

    E se você apenas fizer:
    echo $ (cat distros.txt)

  10.   Anson Rodrigues dito

    Ainda mais fácil:
    awk '{printf $ 0 ″ «}' distros.txt