Linux преобразовать столбец в строку

Обновлено: 07.07.2024

Предположим, у нас есть текстовый файл с именем distros.txt со следующим:

Archlinux
Debian
Ubuntu
Kaos
мягкая фетровая шляпа
Slackware
папуасских

И мы хотим превратить это в:

Archlinux, Debian, Ubuntu, Каос, Fedora, Slackware, Gentoo

Для этого мы будем использовать для цикла y un эхо -n :

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

Готово, вот и трюк

Это покажет нам желаемый результат в терминале, если, с другой стороны, мы хотим, чтобы он был сохранен в другом файле .txt, мы перенаправляем вывод:

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

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

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Из Linux » Учебники / Руководства / Советы » Bash: преобразование столбца текста в строку

Вы можете быть заинтересованы

15 комментариев, оставьте свой

Оставьте свой комментарий Отменить ответ

кот distros.txt | xargs -n 100

Если в .odt у меня есть 2 столбца на каждой странице, они читаются так:

стр.1
столбец 1 столбец 2
стр.2
столбец 3 столбец 4
и так далее

Как мне расположить каждый столбец ниже другого?
столбец 1
столбец 2
столбец 3
столбец 4
и так далее

Если вы хотите разделить табуляцией:
Вы пишете: 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

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

Пусть все будет отлично, поздравляем с наградой в Portalprogramas!

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

cat file.txt | xargs

Я всегда использую excel для этого [транспонирования] . очень полезно

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

Ха-ха-ха в каждом комментарии, разные способы сделать то же самое!

А если бы все было наоборот, как бы это было? То есть преобразование строки слов, разделенных пробелами, в столбец.

Тоже легко, на этот раз с awk.
Предполагается, что поля разделены табуляцией или пробелами, что является наиболее распространенным (если это запятые или что-то еще, это необходимо учитывать и указывать), и что теперь файл содержит: archlinux debian ubuntu kaos fedora slackware gentoo

Поскольку awk напрямую предоставляет нам нужное поле, мы должны заставить его итеративно показывать нам одно за другим до конца. Здесь 7 полей, потому что это значение NF (количество полей). Мы устанавливаем счетчик i = 1, чтобы он показывал нам первое поле ($ 1), и мы должны увеличить его на одну единицу (используя i ++), не превышая последнее поле (NF).

Самый практичный, простой для запоминания способ, который работает для обоих органов чувств:
кот distros.txt | tr '\ n' '' ← Горизонтальный вывод stdout (уже обсуждалось выше)
кот distros.txt | tr '' '\ n' ← Вертикальный вывод стандартного вывода

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

Я работаю над вспомогательным скриптом в bash. В промежуточном шаге у меня данные в виде столбика.

Но для дальнейшей работы мне нужно преобразoвать их в строчку с запятыми.

1656027, 1656028, 1656033, 1656034, 1656050, 1656054, 1656055

Подскажите как это удобнее сделать. awk -F «,» ’’и tr ‘,’ ’ ’ пробывала, но не получилось. Спасибо!

Раз ты такой умный, что же не предложил ничего. А туда дорогу я сама найду!

Как не предложил, предложил же, и абсолютно правильно.


sed-ом заменить конец строки на ', '

а потом им же убрать последний ', '

vel ★★★★★ ( 23.01.20 14:16:24 )
Последнее исправление: vel 23.01.20 14:16:45 (всего исправлений: 1)

tr [code] cat file-stolbik | tr ‘\015\012’ ’ ,’ [/code]

sed [code] echo sed -e 's/$/,/g' file-stolbik [/code]

Пардон (не та разметка) tr


Ну не знаю, просят же на bash, а там это элегантнее и уж для начинающих точно понятнее будет:

vodz ★★★★★ ( 23.01.20 14:24:30 )
Последнее исправление: vodz 23.01.20 14:25:08 (всего исправлений: 1)

для начинающих точно понятнее

знатный тролль, однака.

Детка, я в той теме отметился. копипастить для тебя? Да ну нах

Спасибо ребята! Но я так поняла что без промежуточной записи в файл мне никак.Так может мне просто в /tmp записать файл и оттуда уже с помощью «read line» считывать построчно?

Мысль была такая: для цикла for мне нужны значения переменной для дальнейшей передачи их в следующую команду. У меня есть список JobID из базы данных Slurm и я хочу им соотнести конкретного пользователя.Нужно для статистики.

я так поняла что без промежуточной записи в файл мне никак

Можно и так и эдак. Зависит от того, откуда данные пришли и куда уходят.

Пример от vodz даёт как побочный эффект нормальный полноценный массив, по которому можно ходить через цикл for как в более обычных языках программирования.


В Linux существует множество способов преобразования строки в верхний или нижний регистр.

Наиболее часто используемыми командами для изменения регистра являются tr, sed и awk.

В Bash 4 есть определенные символы, которые позволяют преобразовать регистр строки.

В этом руководстве мы узнаем, как преобразовать строку в верхний и нижний регистр в системах Linux.

Использование команды TR для преобразования регистра

Команда tr используется для перевода и удаления символов.

С ее помощью можно преобразовать строку или содержимое файла в верхний или нижний регистр.

Она очень часто используется в скриптах bash.

Чтобы преобразовать любую строку из верхнего регистра в нижний, введите:

Чтобы преобразовать любую строку из нижнего регистра в верхний, введите:

Например, можно использовать команду tr в скриптах bash для преобразования строки в нижний регистр

Чтобы преобразовать содержимое текстового файла с именем file.txt из нижнего регистра в верхний, выполните следующие действия.

И наоборот, чтобы преобразовать содержимое файла в нижний регистр, введите

Использование SED для преобразования регистра

Команда Sed используется в Linux для разбора и преобразования текста.

С помощью sed можно преобразовать регистр строки.

Используя sed, чтобы преобразовать строку в верхний регистр, введите

Теперь перейдем на строчные буквы, используя следующую команду:

Чтобы преобразовать текст из файла в верхний регистр с помощью инструмента командной строки sed, мы используем следующий шаблон:

Использование AWK для преобразования регистра

Команда awk использует функции tolower и toupper для преобразования регистра строки.

Чтобы преобразовать строку в верхний регистр, введите

Чтобы преобразовать все содержимое текстового файла с именем file.txt в верхний регистр, используйте:

Аналогично для преобразования в нижний регистр используйте:

Преобразование регистра с помощью символов в Bash

Начиная с версии 4 Bash, появилась новая возможность преобразования регистра строки.

  1. Преобразует первый символ любой строки в верхний регистр ^
  2. Преобразует всю строку в верхний регистр ^^
  3. Преобразует первый символ строки в строчный регистр ,
  4. Преобразует всю строку в строчный регистр. ,,

Символы Bash для преобразования регистра строк

Пример 1

Преобразование первого символа строки с помощью символа ^:

Пример 2:

Преобразование всей переменной bash в верхний регистр с помощью символа ^^:

Пример 3:

Преобразование в нижний регистр с помощью символа .

Заключение

В этой статье мы узнали, как конвертировать в прописные или строчные буквы в Linux.

Читайте также: