Bash: Преобразуване на колона с текст в ред

Да предположим, че имаме текстов файл, наречен distros.txt със следното:

archlinux
Debian
Ubuntu
Kaos
Fedora
Slackware
gentoo

И ние искаме да го превърнем в:

archlinux debian ubuntu катоs fedora slackware gentoo

За да постигнем това, ще използваме a за цикъл и ехо -н :

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 (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Хосе Рикардо каза той

    по-лесно:

    котка distros.txt | xargs -n 100

  2.   ¿ каза той

    Ако в .odt имам 2 колони на всяка страница, те четат така:

    стр. 1
    кол.1 кол.2
    стр. 2
    кол.3 кол.4
    и т.н.

    Как да получа всяка колона под другата?
    кол.1
    кол.2
    кол.3
    кол.4
    и т.н.

  3.   хуант каза той

    Много по-лесно:

    Ако искате да сте разделени с раздели:
    Пишете: paste -s distros.txt
    Получавате: archlinux debian ubuntu kaos fedora slackware gentoo

    Ако искате да е разделен с интервали:
    Вие пишете: paste -s -d »» distros.txt
    Получавате: archlinux debian ubuntu kaos fedora slackware gentoo

    Ако искате да го отделите със запетаи:
    Пишете: paste -s -d, distros.txt
    Получавате: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    С паста, котка, awk и други приятели, с малко изобретателност можете да направите много полезни комбинации, без да усложнявате живота си.

    Нека всичко да продължи чудесно, поздравления за наградата в Portalprogramas!

    1.    dhunter каза той

      Използвах sed, awk, cut, sort, uniq, накратко сметаната, но никога не бях обръщал внимание на поставяне, благодаря, че показах какво може да направи. Slds.

  4.   Табрис каза той

    cat file.txt | xargs

    печалба.

  5.   Кристианхд каза той

    Винаги използвам Excel за това [транспониране] ... много полезно

  6.   Бруно Касио каза той

    Друг вариант:

    котка distros.txt | tr «\ n» »«

  7.   Хоакин каза той

    HaHaHa във всеки коментар, различен начин да направите същото!

  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' '' ← Хоризонтален изход stdout (Вече беше обсъдено по-горе)
        котка distros.txt | tr '' '\ n' ← Вертикален изход stdout

        Поздрави!

    2.    хуант каза той

      Определено решението на Etemenanki и в двата случая е добре, ако се интересувате само от просто преобразуване от ред в колона и обратно.

    3.    Хосе GDF каза той

      Благодаря на всички за отговора. Ще ги приложа на практика следващия скрипт, който правя.

      Поздрави.

  9.   Gato каза той

    И ако правите само:
    echo $ (cat distros.txt)

  10.   Ансън Родригес каза той

    Още по-лесно:
    awk '{printf $ 0 ″ «}' distros.txt