Bash: המרת עמודת טקסט לשורה

נניח שיש לנו קובץ טקסט שנקרא distros.txt עם העוקבים:

ארכינוס
דביאן
אובונטו
Kaos
פדורה
רפוי
ג'נטו

ואנחנו רוצים להפוך את זה ל:

ארכלינוקס דביאן אובונטו קאוס פדורה

כדי להשיג זאת נשתמש ב- לולאה ו הד - n :

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

בוצע, זה עושה את הטריק 🙂

זה יראה לנו את התוצאה הרצויה בטרמינל, אם מצד שני אנו רוצים שהיא תישמר בקובץ .txt אחר, אנו מפנים את הפלט:

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

וואלה 🙂

ובכן כלום, אני מקווה שתמצא את זה מועיל. תקף להבהיר שאפשר לעשות את זה גם עם ביטויים רגולריים, אני פשוט לא יודע איך ... אבל, עם ביטויים רגולריים אתה יכול לעשות כמעט הכל חחח.


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   חוסה ריקרדו דיג'ו

    קל יותר:

    חתול distros.txt | xargs -n 100

  2.   ¿ דיג'ו

    אם ב- .odt יש לי 2 עמודות בכל עמוד, הם קוראים כך:

    עמ '1
    קול 1 קול 2
    עמ '2
    קול 3 קול 4
    וכו '

    כיצד אוכל להשיג כל עמודה תחת השנייה?
    עמ '1
    עמ '2
    עמ '3
    עמ '4
    וכו '

  3.   צעיר דיג'ו

    הרבה יותר קל:

    אם תרצה להפריד באמצעות כרטיסיות:
    אתה כותב: הדבק -s distros.txt
    אתה מקבל: archlinux debian ubuntu kaos fedora slackware gentoo

    אם אתה רוצה אותו מופרד על ידי רווחים:
    אתה כותב: הדבק -s -d »» distros.txt
    אתה מקבל: archlinux debian ubuntu kaos fedora slackware gentoo

    אם אתה רוצה להפריד אותו באמצעות פסיקים:
    אתה כותב: הדבק -s -d, distros.txt
    אתה מקבל: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    עם הדבק, חתול, awk וחברים אחרים, עם קצת כושר המצאה אתה יכול לעשות שילובים שימושיים רבים מבלי לסבך את חייך.

    תן לכל דבר להמשיך נהדר, מזל טוב על הפרס בתכניות פורטל!

    1.    מטלטל דיג'ו

      השתמשתי בסד, awk, חתכתי, מיון, uniq, בקיצור הקרם, אבל מעולם לא שמתי לב להדביק, תודה שהראית מה הוא יכול לעשות. Slds.

  4.   טבריס דיג'ו

    חתול file.txt | xargs

    רווח.

  5.   כריסטיאנהד דיג'ו

    בסופו של דבר אני תמיד משתמש ב- excel עבור זה [transpose] ... מאוד שימושי

  6.   ברונו קסיו דיג'ו

    גרסה אחרת:

    חתול distros.txt | tr «\ n» »«

  7.   חואקין דיג'ו

    האהא בכל הערה, דרך אחרת לעשות את אותו הדבר!

  8.   חוזה GDF דיג'ו

    וכדי לעשות את ההפך, איך זה יהיה? כלומר, המרת שורה של מילים המופרדות על ידי רווחים לעמודה.

    1.    צעיר דיג'ו

      גם קל, הפעם עם awk.
      בהנחה שהשדות מופרדים על ידי כרטיסיות או רווחים, וזה הנפוץ ביותר (אם זה באמצעות פסיקים או משהו אחר, יש לקחת אותו בחשבון ולציין אותו), וכי הקובץ מכיל כעת: archlinux debian ubuntu kaos fedora slackware gentoo

      מכיוון ש- awk נותן לנו באופן ישיר את התחום שאנחנו רוצים, עלינו לגרום לו להראות לנו באופן איטראטיבי בזה אחר זה עד הסוף. ישנם 7 שדות מכיוון שזה הערך של NF (מספר שדות). הגדרנו את המונה i = 1, כך שהוא מראה לנו את השדה הראשון ($ 1) ועלינו לגרום לו להגדיל ביחידה אחת (באמצעות i ++) מבלי לחרוג מהשדה האחרון (NF).

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

      1.    אטמננקי דיג'ו

        הדרך המעשית ביותר, הקלה לזכירה ושפועלת לשני המובנים היא זו:
        חתול distros.txt | tr '\ n' '' ← פלט סטנדאוט אופקי (כבר דובר לעיל)
        חתול distros.txt | tr '' '\ n' ← פלט אנכי אנכי

        ברכות!

    2.    צעיר דיג'ו

      בהחלט הפיתרון של Etemenanki, בשני הכיוונים, הוא בסדר אם אתה מעוניין רק בשינוי פשוט משורה לטור ולהיפך.

    3.    חוזה GDF דיג'ו

      תודה לכולכם על התגובה. אשים אותם לפועל בתסריט הבא שאעשה.

      ברכות.

  9.   Gato דיג'ו

    ואם רק תעשה:
    הד $ (חתול distros.txt)

  10.   אנסון רודריגז דיג'ו

    אפילו קל יותר:
    awk '{printf $ 0 ″ «}' distros.txt