Să presupunem că avem un fișier text numit distros.txt cu următoarele:
ArchLinux
Debian
ubuntu
haos
Fedora
slackware
gentoos
Și vrem să-l transformăm în:
archlinux debian ubuntu kaos fedora slackware gentoo
Pentru a realiza acest lucru vom folosi un pentru bucla și o ecou -n :
for i in `< distros.txt`; do echo -n ${i}" ";done; echo ""
Gata, asta face trucul 🙂
Acest lucru ne va arăta rezultatul dorit în terminal, dacă pe de altă parte dorim să fie salvat într-un alt fișier .txt redirecționăm ieșirea:
for i in `< distros.txt`; do echo -n ${i}" ";done; echo "" > distros-nuevas.txt
Și voila 🙂
Ei bine, nimic, sper să vi se pară util. Valabil pentru a clarifica că se poate face și cu expresii regulate, pur și simplu nu știu cum ... dar, cu expresii regulate puteți face aproape tot hahaha.
Mai ușor:
pisica distros.txt | xargs -n 100
Dacă într-un .odt am 2 coloane pe fiecare pagină, citesc astfel:
p. 1
col.1 col.2
p. 2
col.3 col.4
etc
Cum pot obține fiecare coloană sub cealaltă?
col.1
col.2
col.3
col.4
etc
Mult mai ușor:
Dacă doriți să fie separați prin file:
Scrii: paste -s distros.txt
Obțineți: archlinux debian ubuntu kaos fedora slackware gentoo
Dacă doriți să fie separat de spații:
Scrii: paste -s -d »» distros.txt
Obțineți: archlinux debian ubuntu kaos fedora slackware gentoo
Dacă doriți să fie separat prin virgule:
Scrii: paste -s -d, distros.txt
Obțineți: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo
Cu pastă, pisică, awk și alți prieteni, cu puțină ingeniozitate puteți face multe combinații utile fără a vă complica viața.
Lasă totul să meargă grozav, felicitări pentru premiul din Portalprogramas!
Am folosit sed, awk, cut, sort, uniq, pe scurt crema, dar nu am acordat niciodată atenție lipirii, mulțumesc că am arătat ce poate face. Slds.
cat file.txt | xargs
beneficiu.
Întotdeauna ajung să folosesc excel pentru acest [transpune] ... foarte util
O altă variantă:
pisica distros.txt | tr «\ n» »«
HaHaHa în fiecare comentariu, un mod diferit de a face același lucru!
Și pentru a face contrariul, cum ar fi? Adică, convertind o linie de cuvinte separate prin spații într-o coloană.
De asemenea, ușor, de data asta cu awk.
Presupunând că câmpurile sunt separate prin file sau spații, ceea ce este cel mai frecvent (dacă este prin virgulă sau altceva, trebuie luat în considerare și indicat) și că fișierul conține acum: archlinux debian ubuntu kaos fedora slackware gentoo
Deoarece awk ne oferă direct câmpul pe care îl dorim, trebuie să îl facem să ne arate iterativ unul câte unul până la sfârșit. Există 7 câmpuri, deoarece aceasta este valoarea NF (Număr de câmpuri). Am setat contorul i = 1, astfel încât să ne arate primul câmp ($ 1) și trebuie să-l creștem cu o unitate (folosind i ++) fără a depăși ultimul câmp (NF).
awk '{for (i = 1; i <= NF; i ++) {print $ i}}' distros.txt
Cel mai practic mod, ușor de reținut și care funcționează pentru ambele simțuri este acesta:
pisica distros.txt | tr '\ n' '' ← ieșire stdout orizontală (deja discutat mai sus)
pisica distros.txt | tr '' '\ n' ← ieșire verticală verticală
Salutări!
Cu siguranță, soluția Etemenanki, în ambele sensuri, este în regulă dacă sunteți interesat doar de o simplă transformare de la rând la coloană și invers.
Vă mulțumesc tuturor pentru răspuns. Le voi pune în practică în următorul scenariu pe care îl fac.
Salutări.
Și dacă faceți doar:
echo $ (cat distros.txt)
Și mai ușor:
awk '{printf $ 0 ″ «}' distros.txt