Bash: Pretvorite stupac teksta u red

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.


15 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Joseph Ricardo rekao je

    lakše:

    mačka distros.txt | xargs -n 100

  2.   ¿ rekao je

    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

  3.   john rekao je

    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!

    1.    dhunter rekao je

      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.

  4.   tabris rekao je

    cat file.txt | xargs

    profit.

  5.   Cristianhcd rekao je

    Uvijek koristim excel za ovo [transponiranje] ... vrlo korisno

  6.   Bruno cascio rekao je

    Druga varijanta:

    mačka distros.txt | tr «\ n» »«

  7.   Joaquin rekao je

    HaHaHa u svakom komentaru, drugačiji način da se to učini!

  8.   Jose GDF rekao je

    A da se radi suprotno, kako bi to bilo? Odnosno, pretvaranje retka riječi odvojenih razmacima u stupac.

    1.    john rekao je

      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

      1.    Etemenanki rekao je

        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!

    2.    john rekao je

      Definitivno je Etemenankijevo rješenje, u oba smjera, u redu ako želite samo jednostavnu transformaciju iz reda u stupac i obrnuto.

    3.    Jose GDF rekao je

      Hvala svima što ste odgovorili. Primijenit ću ih u praksi u sljedećem scenariju koji radim.

      Pozdrav.

  9.   Gato rekao je

    A ako samo radite:
    echo $ (mačka distros.txt)

  10.   Anson rodriguez rekao je

    Još lakše:
    awk '{printf $ 0 ″ «}' distros.txt