Pretpostavimo da imamo tekstualnu datoteku koja se zove distros.txt sa sljedećim:
archlinux
debian
ubuntu
kaosa
fedora
slackware
gentoo
I želimo to pretvoriti u:
archlinux debian ubuntu kao fedora slackware gentoo
Da bismo to postigli koristit ćemo a for loop i a odjek -n :
for i in `< distros.txt`; do echo -n ${i}" ";done; echo ""
Gotovo, ovo je trik 🙂
To će nam pokazati željeni rezultat u terminalu, ako s druge strane želimo da se on sačuva u drugoj .txt datoteci, preusmjerimo izlaz:
for i in `< distros.txt`; do echo -n ${i}" ";done; echo "" > distros-nuevas.txt
I voila 🙂
Pa ništa, nadam se da će vam biti korisno. Valja pojasniti da se to može učiniti i s regularnim izrazima, samo ne znam kako ... ali, s regularnim izrazima možete učiniti gotovo sve hahaha.
lakše:
mačka distros.txt | xargs -n 100
Ako u .odt-u na svakoj stranici imam 2 stupca, oni glase ovako:
str
kol.1 kol.2
str
kol.3 kol.4
itd
Kako dobiti svaku kolonu ispod druge?
kol.1
kol.2
kol.3
kol.4
itd
Puno lakše:
Ako želite razdvojiti karticama:
Pišete: paste -s distros.txt
Dobijate: archlinux debian ubuntu kaos Fedora slackware gentoo
Ako ga želite razdvojiti razmacima:
Napišete: paste -s -d »» distros.txt
Dobit ćete: archlinux debian ubuntu kaos fedora slackware gentoo
Ako želite da se odvoji zarezima:
Pišete: paste -s -d, distros.txt
Dobijate: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo
S pastom, mačkom, awkom i drugim prijateljima, uz malo domišljatosti, možete napraviti mnoge korisne kombinacije bez kompliciranja života.
Neka se sve nastavi sjajno, čestitamo na nagradi u Portalprogramasu!
Koristim sed, awk, cut, sort, uniq, ukratko kremu, ali nikada nisam obraćao pažnju na lijepljenje, hvala što ste pokazali šta može. Slds.
cat file.txt | xargs
profit.
Uvijek koristim excel za ovo [transponiranje] ... vrlo korisno
Druga varijanta:
mačka distros.txt | tr «\ n» »«
HaHaHa u svakom komentaru, drugačiji način da se to učini!
A da se radi suprotno, kako bi to bilo? Odnosno, pretvaranje retka riječi odvojenih razmacima u stupac.
I lako, ovaj put s awkom.
Pod pretpostavkom da su polja odvojena tabulatorima ili razmacima, što je najčešće (ako je zarezom ili nečim drugim, to se mora uzeti u obzir i naznačiti), te da datoteka sada sadrži: archlinux debian ubuntu kaos fedora slackware gentoo
Budući da nam awk direktno daje polje koje želimo, moramo ga iterativno prikazivati jednog po jednog do kraja. Postoji 7 polja jer je ovo vrijednost NF (Broj polja). Postavili smo brojač i = 1, tako da nam prikazuje prvo polje ($ 1) i moramo ga povećati za jednu jedinicu (koristeći i ++) bez prekoračenja zadnjeg polja (NF).
awk '{for (i = 1; i <= NF; i ++) {print $ i}}' distros.txt
Najpraktičniji način, lak za pamćenje i koji djeluje za oba osjetila je sljedeći:
mačka distros.txt | tr '\ n' '' ← Horizontalni stdout izlaz (Već je gore razmatrano)
mačka distros.txt | tr '' '\ n' ← Vertikalni stdout izlaz
Pozdrav!
Definitivno je Etemenankijevo rješenje, u oba smjera, u redu ako želite samo jednostavnu transformaciju iz reda u stupac i obrnuto.
Hvala svima što ste odgovorili. Primijenit ću ih u praksi u sljedećem scenariju koji radim.
Pozdrav.
A ako samo radite:
echo $ (mačka distros.txt)
Još lakše:
awk '{printf $ 0 ″ «}' distros.txt