Bash: Convertir una columna de text en un fila

Suposem que tenim un arxiu de text anomenat distros.txt amb el següent:

Archlinux
debian
ubuntu
kaos
fedora
slackware
gentoo

I desitgem convertir-lo en:

ArchLinux debian ubuntu kaos fedora slackware gentoo

Per aconseguir això farem servir un cicle for i un fet -n :

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

A punt, això fa el truc 🙂

Això ens mostrarà a la terminal el resultat desitjat, si d'altra banda volem ja que es guardi en un altre arxiu .txt redireccionem l'output:

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

I llest 🙂

Bé res, espero els sigui d'utilitat. Vàlid aclarir que també es pot fer amb expressions regulars, només que no sé com ... però, amb expressions regulars es pot fer gairebé tot jajaja.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Jose Ricardo va dir

    més fàcil:

    cat distros.txt | xargs -n 100

  2.   ¿ va dir

    Si en un .odt tinc a cada pàgina 2 columnes, es llegeixen així:

    pàg.1
    col.1 col.2
    pàg.2
    col.3 col.4
    etcètera...

    Com faig perquè quedi cada columna sota de l'altra?
    col.1
    col.2
    col.3
    col.4
    etcètera...

  3.   juant va dir

    Molt més fàcil:

    Si ho desitja separat per tabulacions:
    Escrius: paste -s distros.txt
    Obtens: ArchLinux debian ubuntu kaos fedora slackware gentoo

    Si ho desitja separat per espais:
    Escrius: paste -s -d »» distros.txt
    Obtens: ArchLinux debian ubuntu kaos fedora slackware gentoo

    Si ho desitja separat per comes:
    Escrius: paste -s -d, distros.txt
    Obtens: ArchLinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    Amb paste, cat, awk i altres amics, amb una mica d'enginy es poden fer moltes combinacions útils sense complicar-se la vida.

    Que segueixi tot genial, enhorabona pel premi a Portalprogramas!

    1.    caçador va dir

      Porto temps usant set, awk, cut, sort, uniq, en fi la crema, però mai havia fet cas a paste, gràcies per mostrar el que pot fer. Slds.

  4.   Tabris va dir

    cat arxiu.txt | xargs

    benefici.

  5.   cristianhcd va dir

    jo per això sempre acabo fent servir excel [transposar] ... molt útil

  6.   Bruno Cascio va dir

    Una altra variant:

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

  7.   Joaquin va dir

    Jajaja en cada comentari, una manera diferent de fer el mateix!

  8.   José GDF va dir

    I per fer el contrari, com seria? És a dir, convertir una línia de paraules separades per espais en una columna.

    1.    juant va dir

      Fàcil també, aquest cop amb awk.
      Suposant que estiguin separats els camps per tabulacions o espais, que és el més corrent (si és per comes o una altra cosa cal tenir-ho en compte i indicar-ho), i que l'arxiu ara conté: ArchLinux debian ubuntu kaos fedora slackware gentoo

      Ja que awk ens dóna directament el camp que desitgem, cal aconseguir que iterativament ens mostri un a un fins al final. Hi ha 7 camps perquè aquest és el valor de NF (Number of fields). Posem el comptador i = 1, perquè ens mostri el primer camp ($ 1) i cal aconseguir que augmenti en una unitat (mitjançant i ++) sense que superi l'últim camp (NF).

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

      1.    Etemenanki va dir

        La manera més pràctica, fàcil de recordar i que serveix per als dos sentits és aquesta:
        cat distros.txt | tr '\ n' '' ← Sortida stdout horitzontal (Ja comentada més amunt)
        cat distros.txt | tr '' '\ n' ← Sortida stdout vertical

        Salutacions!

    2.    juant va dir

      Definitivament la solució de Etemenanki, en ambdós sentits, està molt bé si només interessa una simple transformació de fila a columna i viceversa.

    3.    José GDF va dir

      Gràcies a tots per respondre. Les posaré en pràctica el proper script que faci.

      Salutacions.

  9.   gat va dir

    I si només es fa:
    echo $ (cat distros.txt)

  10.   Anson Rodriguez va dir

    Mas fàcil encara:
    awk '{printf $ 0 "«}' distros.txt