Bash: перетворення стовпця тексту в рядок

Припустимо, у нас є текстовий файл із назвою distros.txt з наступним:

Арклінукс
Debian
Ubuntu
якs
м'яка фетровий капелюх
слабкі програми
gentoo

І ми хочемо перетворити це на:

архіву debian ubuntu як 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

І вуаля 🙂

Ну нічого, сподіваюся, вам це стане в нагоді. Дійсно уточнити, що це також можна робити з регулярними виразами, я просто не знаю як ... але, з регулярними виразами ви можете робити майже все ха-ха-ха.


15 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  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

    З пастою, котом, авком та іншими друзями, з невеликою винахідливістю, ви можете скласти безліч корисних комбінацій, не ускладнюючи своє життя.

    Нехай все продовжується чудово, вітаємо з нагородою у Portalprogramas!

    1.    dhunter - сказав він

      Я використовував sed, awk, cut, sort, uniq, коротше крем, але ніколи не звертав уваги на вставлення, дякую, що показав, що він може зробити. Slds.

  4.   Табріс - сказав він

    cat file.txt | ксарг

    прибутку.

  5.   Крістіанхд - сказав він

    Я завжди використовую Excel для цього [транспонування] ... дуже корисно

  6.   Бруно Касьо - сказав він

    Інший варіант:

    cat 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.    Етеменанки - сказав він

        Найпрактичніший спосіб, який легко запам’ятати, і який працює для обох органів чуття - це:
        cat distros.txt | tr '\ n' '' ← Вихід горизонтального виведення (вже обговорювалося вище)
        cat distros.txt | tr '' '\ n' ← Вертикальний вихід stdout

        Привіт!

    2.    джуант - сказав він

      Безумовно, рішення Етеменанкі в обох напрямках добре, якщо вас цікавить лише просте перетворення з рядка в стовпець і навпаки.

    3.    Хосе GDF - сказав він

      Дякую всім за відповідь. Я застосую їх на практиці в наступному сценарії, який я роблю.

      Привіт.

  9.   Гато - сказав він

    І якщо ви лише робите:
    echo $ (cat distros.txt)

  10.   Ансон Родрігес - сказав він

    Ще простіше:
    awk '{printf $ 0 ″ «}' distros.txt