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.
mas fácil:
cat distros.txt | xargs -n 100
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.
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!
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.
cat archivo.txt | xargs
profit.
yo para esto siempre termino usando excel [trasponer]… muy útil
Otra variante:
cat distros.txt | tr «\n» » «
JaJaJa en cada comentario, ¡una manera distinta de hacer lo mismo!
Y para hacer lo contrario, ¿cómo sería? Es decir, convertir una línea de palabras separadas por espacios en una columna.
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
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!
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.
Gracias a todos por responder. Las pondré en práctica el próximo script que haga.
Saludos.
Y si sólo se hace:
echo $(cat distros.txt)
Mas facil aun:
awk ‘{printf $0″ «}’ distros.txt