Bash: Konverter en kolonne med tekst til en række

Antag, at vi har en tekstfil kaldet distros.txt med følgende:

ArchLinux
debian
ubuntu
Kaos
fedora
Slackware
gentoo

Og vi vil gøre det til:

archlinux debian ubuntu kaos fedora slackware gentoo

For at opnå dette vil vi bruge en til løkke og en ekko -n :

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

Udført, dette gør tricket 🙂

Dette viser os det ønskede resultat i terminalen, hvis vi på den anden side vil have det gemt i en anden .txt-fil, omdirigerer vi output:

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

Og voila 🙂

Nå intet, jeg håber, du finder det nyttigt. Gyldig til at præcisere, at det også kan gøres med regulære udtryk, jeg ved bare ikke hvordan ... men med regelmæssige udtryk kan du gøre næsten alt hahaha.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Joseph Ricardo sagde han

    lettere:

    kat distros.txt | xargs -n 100

  2.   ¿ sagde han

    Hvis jeg i en .odt har 2 kolonner på hver side, læser de sådan:

    s. 1
    kol. 1 kol. 2
    s. 2
    kol. 3 kol. 4
    etc.

    Hvordan får jeg hver kolonne under den anden?
    kol. 1
    kol. 2
    kol. 3
    kol. 4
    etc.

  3.   John sagde han

    Meget nemmere:

    Hvis du vil adskilt af faner:
    Du skriver: indsæt -distros.txt
    Du får: archlinux debian ubuntu kaos fedora slackware gentoo

    Hvis du vil have det adskilt af mellemrum:
    Du skriver: indsæt -s -d »» distros.txt
    Du får: archlinux debian ubuntu kaos fedora slackware gentoo

    Hvis du vil have det adskilt med kommaer:
    Du skriver: indsæt -s -d, distros.txt
    Du får: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    Med pasta, kat, awk og andre venner med lidt opfindsomhed kan du lave mange nyttige kombinationer uden at komplicere dit liv.

    Lad alt fortsætte godt, tillykke med prisen i Portalprogramas!

    1.    djæger sagde han

      Jeg har brugt sed, awk, cut, sort, uniq, kort sagt cremen, men jeg havde aldrig været opmærksom på at indsætte, tak for at vise, hvad den kan gøre. Slds.

  4.   tabris sagde han

    kattefil.txt | xargs

    profit.

  5.   Cristianhcd sagde han

    Jeg ender altid med at bruge excel til dette [transponere] ... meget nyttigt

  6.   Bruno cascio sagde han

    En anden variant:

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

  7.   Joaquin sagde han

    HaHaHa i hver kommentar, en anden måde at gøre det samme på!

  8.   Jose GDF sagde han

    Og for at gøre det modsatte, hvordan ville det være? Det vil sige at konvertere en ordlinje adskilt af mellemrum til en kolonne.

    1.    John sagde han

      Også let, denne gang med awk.
      Under forudsætning af at felterne er adskilt af faner eller mellemrum, hvilket er det mest almindelige (hvis det er med kommaer eller noget andet, skal det tages i betragtning og angives), og at filen nu indeholder: archlinux debian ubuntu kaos fedora slackware gentoo

      Da awk direkte giver os det felt, vi ønsker, er vi nødt til at gøre det iterativt vise os en efter en indtil slutningen. Der er 7 felter, fordi dette er værdien af ​​NF (antal felter). Vi indstiller tælleren i = 1, så den viser os det første felt ($ 1), og vi skal få det til at stige med en enhed (ved hjælp af i ++) uden at overskride det sidste felt (NF).

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

      1.    Etemenanki sagde han

        Den mest praktiske måde, der er let at huske, og som fungerer for begge sanser, er denne:
        kat distros.txt | tr '\ n' '' ← Vandret stdout-output (allerede omtalt ovenfor)
        kat distros.txt | tr '' '\ n' ← Lodret stdout-output

        Greetings!

    2.    John sagde han

      Absolut Etemenankis løsning, begge veje, er fin, hvis du kun er interesseret i en simpel transformation fra række til kolonne og omvendt.

    3.    Jose GDF sagde han

      Tak alle sammen for at svare. Jeg sætter dem i praksis i det næste script, jeg laver.

      Greetings.

  9.   Gato sagde han

    Og hvis du kun gør:
    echo $ (cat distros.txt)

  10.   Anson rodriguez sagde han

    Endnu nemmere:
    awk '{printf $ 0 ″ «}' distros.txt