Bash: Konvertera en kolumn med text till en rad

Anta att vi har en textfil som heter distros.txt med följande:

archlinux
debian
ubuntu
skjorta
fedora
slackware
gentoo

Och vi vill göra det till:

archlinux debian ubuntu kaos fedora slackware gentoo

För att uppnå detta kommer vi att använda en för loop och en eko -n :

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

Klar, det här gör tricket 🙂

Detta visar oss önskat resultat i terminalen, om vi å andra sidan vill att det ska sparas i en annan .txt-fil omdirigerar vi utdata:

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

Och voila 🙂

Nåväl ingenting, jag hoppas att du tycker att det är användbart. Giltigt för att klargöra att det också kan göras med reguljära uttryck, jag vet bara inte hur ... men med reguljära uttryck kan du göra nästan allt hahaha.


Innehållet i artikeln följer våra principer om redaktionell etik. Klicka på för att rapportera ett fel här.

15 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras.

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Jose Ricardo sade

    lättare:

    katt distros.txt | xargs -n 100

  2.   ¿ sade

    Om jag har två kolumner på varje sida läser de så här:

    s. 1
    kol. 1 kol. 2
    s. 2
    kol. 3 kol. 4
    och så vidare

    Hur får jag varje kolumn under varandra?
    kol.1
    kol.2
    kol.3
    kol.4
    och så vidare

  3.   juant sade

    Mycket enklare:

    Om du vill att den ska separeras med flikar:
    Du skriver: klistra in -s distros.txt
    Du får: archlinux debian ubuntu kaos fedora slackware gentoo

    Om du vill att den ska separeras med mellanslag:
    Du skriver: klistra in -s -d »» distros.txt
    Du får: archlinux debian ubuntu kaos fedora slackware gentoo

    Om du vill att den ska separeras med komma:
    Du skriver: klistra in -s -d, distros.txt
    Du får: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    Med pasta, katt, awk och andra vänner, med lite uppfinningsrikedom kan du göra många användbara kombinationer utan att komplicera ditt liv.

    Låt allt fortsätta bra, grattis till utmärkelsen i Portalprogramas!

    1.    djägare sade

      Jag har använt sed, awk, cut, sort, uniq, kort sagt grädden, men jag hade aldrig varit uppmärksam på att klistra in, tack för att jag visade vad den kan göra. Slds.

  4.   Tabris sade

    kattfil.txt | xargs

    vinst.

  5.   Cristianhcd sade

    Jag slutar alltid använda excel för detta [transponera] ... mycket användbart

  6.   Bruno cascio sade

    En annan variant:

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

  7.   Joaquin sade

    HaHaHa i varje kommentar, ett annat sätt att göra detsamma!

  8.   Jose GDF sade

    Och för att göra motsatsen, hur skulle det vara? Det vill säga omvandla en rad med ord åtskilda av mellanslag till en kolumn.

    1.    juant sade

      Lätt också, den här gången med awk.
      Förutsatt att fälten är åtskilda av flikar eller mellanslag, vilket är det vanligaste (om det är med komma eller något annat måste det tas i beaktande och anges), och att filen nu innehåller: archlinux debian ubuntu kaos fedora slackware gentoo

      Eftersom awk direkt ger oss det fält vi vill ha, måste vi göra det iterativt visa oss en efter en till slutet. Det finns sju fält eftersom detta är värdet på NF (Antal fält). Vi ställer in räknaren i = 7, så att den visar oss det första fältet ($ 1) och vi måste få det att öka med en enhet (med i ++) utan att överskrida det sista fältet (NF).

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

      1.    Etemenanki sade

        Det mest praktiska sättet, lätt att komma ihåg och som fungerar för båda sinnen, är detta:
        katt distros.txt | tr '\ n' '' ← Horisontell utmatning (redan diskuterat ovan)
        katt distros.txt | tr '' '\ n' ← Vertikal stdout-utgång

        Hälsningar!

    2.    juant sade

      Definitivt Etemenankis lösning, båda sätten, är bra om du bara är intresserad av en enkel omvandling från rad till kolumn och vice versa.

    3.    Jose GDF sade

      Tack alla för att du svarade. Jag kommer att omsätta dem i nästa manus jag gör.

      Hälsningar.

  9.   cat sade

    Och om du bara gör:
    echo $ (cat distros.txt)

  10.   Anson rodriguez sade

    Ännu enklare:
    awk '{printf $ 0 ″ «}' distros.txt