נניח שיש לנו קובץ טקסט שנקרא 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
וואלה 🙂
ובכן כלום, אני מקווה שתמצא את זה מועיל. תקף להבהיר שאפשר לעשות את זה גם עם ביטויים רגולריים, אני פשוט לא יודע איך ... אבל, עם ביטויים רגולריים אתה יכול לעשות כמעט הכל חחח.
קל יותר:
חתול distros.txt | xargs -n 100
אם ב- .odt יש לי 2 עמודות בכל עמוד, הם קוראים כך:
עמ '1
קול 1 קול 2
עמ '2
קול 3 קול 4
וכו '
כיצד אוכל להשיג כל עמודה תחת השנייה?
עמ '1
עמ '2
עמ '3
עמ '4
וכו '
הרבה יותר קל:
אם תרצה להפריד באמצעות כרטיסיות:
אתה כותב: הדבק -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 וחברים אחרים, עם קצת כושר המצאה אתה יכול לעשות שילובים שימושיים רבים מבלי לסבך את חייך.
תן לכל דבר להמשיך נהדר, מזל טוב על הפרס בתכניות פורטל!
השתמשתי בסד, awk, חתכתי, מיון, uniq, בקיצור הקרם, אבל מעולם לא שמתי לב להדביק, תודה שהראית מה הוא יכול לעשות. Slds.
חתול file.txt | xargs
רווח.
בסופו של דבר אני תמיד משתמש ב- excel עבור זה [transpose] ... מאוד שימושי
גרסה אחרת:
חתול distros.txt | tr «\ n» »«
האהא בכל הערה, דרך אחרת לעשות את אותו הדבר!
וכדי לעשות את ההפך, איך זה יהיה? כלומר, המרת שורה של מילים המופרדות על ידי רווחים לעמודה.
גם קל, הפעם עם 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
הדרך המעשית ביותר, הקלה לזכירה ושפועלת לשני המובנים היא זו:
חתול distros.txt | tr '\ n' '' ← פלט סטנדאוט אופקי (כבר דובר לעיל)
חתול distros.txt | tr '' '\ n' ← פלט אנכי אנכי
ברכות!
בהחלט הפיתרון של Etemenanki, בשני הכיוונים, הוא בסדר אם אתה מעוניין רק בשינוי פשוט משורה לטור ולהיפך.
תודה לכולכם על התגובה. אשים אותם לפועל בתסריט הבא שאעשה.
ברכות.
ואם רק תעשה:
הד $ (חתול distros.txt)
אפילו קל יותר:
awk '{printf $ 0 ″ «}' distros.txt