Bash: Convertir una columna de texto en un fila

Supongamos que tenemos un archivo de texto llamado distros.txt con lo siguiente:

archlinux
debian
ubuntu
kaos
fedora
slackware
gentoo

Y deseamos convertirlo en:

archlinux debian ubuntu kaos fedora slackware gentoo

Para lograr esto usaremos un ciclo for y un echo -n :

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

Listo, esto hace el truco 🙂

Esto nos mostrará en la terminal el resultado deseado, si por otra parte queremos ya que se guarde en otro archivo .txt redireccionamos el output:

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

Y listo 🙂

Bueno nada, espero les sea de utilidad. Válido aclarar que también se puede hacer con expresiones regulares, solo que no sé cómo… pero, con expresiones regulares se puede hacer casi todo jajaja.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Jose Ricardo dijo

    mas fácil:

    cat distros.txt | xargs -n 100

  2.   ¿ dijo

    Si en un .odt tengo en cada página 2 columnas, se leen así:

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

    ¿cómo hago para que quede cada columna debajo de la otra?
    col.1
    col.2
    col.3
    col.4
    etc.

  3.   juant dijo

    Mucho más fácil:

    Si lo deseas separado por tabulaciones:
    Escribes: paste -s distros.txt
    Obtienes: archlinux debian ubuntu kaos fedora slackware gentoo

    Si lo deseas separado por espacios:
    Escribes: paste -s -d» » distros.txt
    Obtienes: archlinux debian ubuntu kaos fedora slackware gentoo

    Si lo deseas separado por comas:
    Escribes: paste -s -d, distros.txt
    Obtienes: archlinux,debian,ubuntu,kaos,fedora,slackware,gentoo

    Con paste, cat, awk y demás amigos, con un poco de ingenio se pueden hacer muchas combinaciones útiles sin complicarse la vida.

    Que siga todo genial, enhorabuena por el premio en Portalprogramas!

    1.    dhunter dijo

      Llevo tiempo usando sed, awk, cut, sort, uniq, en fin la crema, pero nunca había hecho caso a paste, gracias por mostrar lo que puede hacer. Slds.

  4.   Tabris dijo

    cat archivo.txt | xargs

    profit.

  5.   cristianhcd dijo

    yo para esto siempre termino usando excel [trasponer]… muy útil

  6.   Bruno Cascio dijo

    Otra variante:

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

  7.   Joaquin dijo

    JaJaJa en cada comentario, ¡una manera distinta de hacer lo mismo!

  8.   José GDF dijo

    Y para hacer lo contrario, ¿cómo sería? Es decir, convertir una línea de palabras separadas por espacios en una columna.

    1.    juant dijo

      Fácil también, esta vez con awk.
      Suponiendo que estén separados los campos por tabulaciones o espacios, que es lo más corriente ( si es por comas u otra cosa hay que tenerlo en cuenta e indicarlo), y que el archivo ahora contiene: archlinux debian ubuntu kaos fedora slackware gentoo

      Ya que awk nos dá directamente el campo que deseemos, hay que conseguir que iteratívamente nos muestre uno a uno hasta el final. Hay 7 campos porque este es el valor de NF (Number of fields). Ponemos el contador i=1, para que nos muestre el primer campo ($1) y hay que conseguir que aumente en una unidad (mediante i ++) sin que supere el último campo (NF).

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

      1.    Etemenanki dijo

        La manera más práctica, fácil de recordar y que sirve para los dos sentidos es esta:
        cat distros.txt | tr ‘\n’ ‘ ‘ ← Salida stdout horizontal (Ya comentada más arriba)
        cat distros.txt | tr ‘ ‘ ‘\n’ ← Salida stdout vertical

        Saludos!

    2.    juant dijo

      Definitívamente la solución de Etemenanki, en ambos sentidos, está muy bien si sólo interesa una simple transformación de fila a columna y viceversa.

    3.    José GDF dijo

      Gracias a todos por responder. Las pondré en práctica el próximo script que haga.

      Saludos.

  9.   Gato dijo

    Y si sólo se hace:
    echo $(cat distros.txt)

  10.   Anson Rodriguez dijo

    Mas facil aun:
    awk ‘{printf $0″ «}’ distros.txt