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.
més fàcil:
cat distros.txt | xargs -n 100
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...
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!
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.
cat arxiu.txt | xargs
benefici.
jo per això sempre acabo fent servir excel [transposar] ... molt útil
Una altra variant:
cat distros.txt | tr «\ n» »«
Jajaja en cada comentari, una manera diferent de fer el mateix!
I per fer el contrari, com seria? És a dir, convertir una línia de paraules separades per espais en una columna.
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
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!
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.
Gràcies a tots per respondre. Les posaré en pràctica el proper script que faci.
Salutacions.
I si només es fa:
echo $ (cat distros.txt)
Mas fàcil encara:
awk '{printf $ 0 "«}' distros.txt