Bash: Konverter en kolonne med tekst til en rad

Anta at vi har en tekstfil kalt distros.txt med følgende:

Arch Linux
debian
ubuntu
skjorten
fedora
slackware
gentoo

Og vi vil gjøre det om til:

archlinux debian ubuntu kaos fedora slackware gentoo

For å oppnå dette vil vi bruke en for løkke og en ekko -n :

for i in `< distros.txt`; do echo -n ${i}" ";done; echo ""

Ferdig, dette gjør susen 🙂

Dette viser oss ønsket resultat i terminalen, hvis vi derimot vil at den skal lagres i en annen .txt-fil, omdirigerer vi utdataene:

for i in `< distros.txt`; do echo -n ${i}" ";done; echo "" > distros-nuevas.txt

Og voila 🙂

Vel ingenting, jeg håper du synes det er nyttig. Gyldig for å avklare at det også kan gjøres med regulære uttrykk, jeg vet bare ikke hvordan ... men med vanlige uttrykk kan du gjøre nesten alt hahaha.


15 kommentarer, legg igjen dine

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Joseph Ricardo sa

    lettere:

    cat distros.txt | xargs -n 100

  2.   ¿ sa

    Hvis jeg har to kolonner på hver side, leser de slik:

    s. 1
    kol. 1 kol. 2
    s. 2
    kol. 3 kol. 4
    og så videre

    Hvordan får jeg hver kolonne under den andre?
    kol. 1
    kol. 2
    kol. 3
    kol. 4
    og så videre

  3.   john sa

    Mye enklere:

    Hvis du vil ha den atskilt med faner:
    Du skriver: lim-distros.txt
    Du får: archlinux debian ubuntu kaos fedora slackware gentoo

    Hvis du vil at den skal være atskilt med mellomrom:
    Du skriver: lim -s -d »» distros.txt
    Du får: archlinux debian ubuntu kaos fedora slackware gentoo

    Hvis du vil at den skal skilles med komma:
    Du skriver: lim -s -d, distros.txt
    Du får: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    Med pasta, katt, awk og andre venner, med litt oppfinnsomhet kan du lage mange nyttige kombinasjoner uten å komplisere livet ditt.

    La alt fortsette bra, gratulerer med prisen i Portalprogramas!

    1.    dhunter sa

      Jeg har brukt sed, awk, cut, sort, uniq, kort sagt kremen, men jeg hadde aldri lagt merke til å lime inn, takk for at du viste hva den kan gjøre. Slds.

  4.   tabris sa

    cat file.txt | xargs

    profitt.

  5.   Cristianhcd sa

    Jeg ender alltid med å bruke excel for dette [transponere] ... veldig nyttig

  6.   Bruno cascio sa

    En annen variant:

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

  7.   Joaquin sa

    HaHaHa i hver kommentar, en annen måte å gjøre det samme på!

  8.   Jose GDF sa

    Og for å gjøre det motsatte, hvordan ville det være? Det vil si å konvertere en ordlinje atskilt med mellomrom til en kolonne.

    1.    john sa

      Lett også, denne gangen med awk.
      Forutsatt at feltene er atskilt med faner eller mellomrom, som er det vanligste (hvis det er med komma eller noe annet, må det tas i betraktning og angis), og at filen nå inneholder: archlinux debian ubuntu kaos fedora slackware gentoo

      Siden awk direkte gir oss det feltet vi ønsker, må vi gjøre det iterativt vise oss en etter en til slutten. Det er 7 felt fordi dette er verdien av NF (antall felt). Vi setter telleren i = 1, slik at den viser oss det første feltet ($ 1), og vi må få det til å øke med en enhet (ved hjelp av i ++) uten å overskride det siste feltet (NF).

      awk '{for (i = 1; i <= NF; i ++) {print $ i}}' distros.txt

      1.    Etemenanki sa

        Den mest praktiske måten, lett å huske, og som fungerer for begge sanser, er denne:
        cat distros.txt | tr '\ n' '' ← Horisontal utgang (allerede omtalt ovenfor)
        cat distros.txt | tr '' '\ n' ← Vertikal utgang

        Greetings!

    2.    john sa

      Definitivt Etemenankis løsning, begge veier, er greit hvis du bare vil ha en enkel transformasjon fra rad til kolonne og omvendt.

    3.    Jose GDF sa

      Takk alle for svaret. Jeg vil sette dem i praksis i neste manus jeg gjør.

      Hilsener.

  9.   gato sa

    Og hvis du bare gjør:
    echo $ (cat distros.txt)

  10.   Anson rodriguez sa

    Enda enklere:
    awk '{printf $ 0 ″ «}' distros.txt