Bash: convertiți o coloană de text într-un rând

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.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Iosif Ricardo el a spus

    Mai ușor:

    pisica distros.txt | xargs -n 100

  2.   ¿ el a spus

    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

  3.   Ioan el a spus

    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!

    1.    dhunter el a spus

      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.

  4.   tabris el a spus

    cat file.txt | xargs

    beneficiu.

  5.   Cristianhcd el a spus

    Întotdeauna ajung să folosesc excel pentru acest [transpune] ... foarte util

  6.   Bruno cascio el a spus

    O altă variantă:

    pisica distros.txt | tr «\ n» »«

  7.   Joaquin el a spus

    HaHaHa în fiecare comentariu, un mod diferit de a face același lucru!

  8.   Jose GDF el a spus

    Și pentru a face contrariul, cum ar fi? Adică, convertind o linie de cuvinte separate prin spații într-o coloană.

    1.    Ioan el a spus

      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

      1.    Etemenanki el a spus

        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!

    2.    Ioan el a spus

      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.

    3.    Jose GDF el a spus

      Vă mulțumesc tuturor pentru răspuns. Le voi pune în practică în următorul scenariu pe care îl fac.

      Salutări.

  9.   PISICI el a spus

    Și dacă faceți doar:
    echo $ (cat distros.txt)

  10.   Anson rodriguez el a spus

    Și mai ușor:
    awk '{printf $ 0 ″ «}' distros.txt