LINUX.ORG.RU
ФорумAdmin

Столбец в строку

 


1

2

Как преобразовать столбец:

[list] 1111 2222 3333 [/list]

в строку, через запятую (на bash)

P.S. Сорри за разметку ЛОР



Последнее исправление: anonymus123 (всего исправлений: 2)

А погуглить уже религия запрещает?

Я использую такую конструкцию [code] awk ‘BEGIN { ORS = " " } { print }’ [/code]

А разделителей к awkу навернуть дело техники.

heilnull ★★
()
Последнее исправление: heilnull (всего исправлений: 1)
Ответ на: комментарий от heilnull

Во-первых, правильнее будет

awk 'BEGIN {ORS=","}1'

Во-вторых, это, как и решения выше, не решают проблемы последнего разделителя. Так что вариант с paste наиболее удобен и лаконичен.

anonymous
()
Ответ на: комментарий от Bers666

В оп посте двух слов в строке не было

Последнюю запятую фиксить отдельной регулярной по завершению (и то если надо) зато просто и понятно. Кисс же

Зы. Самое правильное, конечно tr

pihter ★★★★★
()
Ответ на: комментарий от Bers666

Ну тогда так (заодно пустые строки, начальные и конечные и любое количество пробелов между словами игнорируем)

OFS=$IFS
f1=
while IFS=' ' read -a w; do
        [[ ${#w[*]} -eq 0 ]] && continue
        IFS=,
        f1+=${f1:+','}${w[*]}
done
echo "$f1"
IFS=$OFS
vodz ★★★★★
()
NL=$'\n'
read -d '' CONTENTS < file.txt
echo "${CONTENTS//$NL/,}"

anonymous
()
Ответ на: комментарий от pihter

Вообще-то @vodz дал лучший ответ по теме: его решение — на чистом bash’е, без tr’ов, ненужных cat’ов и тем паче без awk’ов.

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Чем он лучший, интересно? Тем, что решение простой задачи вместо 8 символов написано на 100, да еще и с привлечением баш портянок? Я бы сказал, что он такое решение неуместно. Инструмент выбран неправильно.

anonymous
()
Ответ на: комментарий от anonymous

Я бы сказал, что он такое решение неуместно. Инструмент выбран неправильно.

ТС хотел на баш, ему сделали на баш.

crutch_master ★★★★★
()
Ответ на: комментарий от dexpl

tr'у та что будет он потоковый. Килобайт сожрёт, килобайт тут же выплюнет. А тут накопление f1 в цикле.

crutch_master ★★★★★
()

раз уж в треде знатоки баша, объясните мне дураку сие непотребство:

когда в консоли делаю: echo "/home/max/.epm" | sed "s/\//\\\\\//g" => \/home\/max\/.epm

работает, а когда в переменную выхлоп кладу – переменная пустая

pihter ★★★★★
()
Ответ на: комментарий от pihter

хм.. а есть разница между косыми кавычками и $(…) ?

ну, в смысле – уже очевидно что есть, а где почитать?

pihter ★★★★★
()
Ответ на: комментарий от pihter

sed «s///\\//g»

Когда начинаются танцы вокруг экранирования, для меня, это первейший признак сменить *sh, на perl/tcl/python

futurama ★★★★★
()
Ответ на: комментарий от futurama

согласен :) но уже победил, не переписывать же 400 строчек из-за одного танца

pihter ★★★★★
()
Ответ на: комментарий от anonymous

Чем он лучший, интересно?

Я не давал лучший, я давал решение под хотелки одного из комментаторов, которые никаким tr-ом решить невозможно, а не ТСу. А вам, как обычно, только похамить и поплакаться, что какой трудный для понимания вашим мозгам синтаксис одного из старейшего главного инструмента топика сайта.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от anonymous

Почему read без -r, секурный вы наш? Все бэкслэши ТСу поломали.

Ну надо же, в одной короткой строке столько обосраться. Потому что, нравится мне так, ибо по умолчанию. Насчёт вашей секурности — это к вашим тараканам в вашей голове, я то тут причём? Для тупых повторяю, я редко пишу ТСам, ибо их вопросы редко меня вставляют.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Подробности того, что там тебе вставляет, можешь оставить при себе. А вот от того, что ты бэкслэши Bers666 поломал, ты уже не отвертишься. Такое досадное пятно в репутации главного знатока шелла. Позор на весь ЛОР.

Не усугубляй, кайся. Авось, простят.

anonymous
()
Ответ на: комментарий от anonymous

Подробности того, что там тебе вставляет, можешь оставить при себе. А вот от того, что ты бэкслэши Bers666 поломал, ты уже не отвертишься. Такое досадное пятно в репутации главного знатока шелла. Позор на весь ЛОР.

Да щаc, будет мне, особенно анонимоус, разъяснять что я кому должен. Позор — это вон тот коммент с tr-ом выше, десяток людей уже обсосали со всех сторон, нет же решил всех лично ощастливить своим появлением. А Bers666 все дополнительные хотелки не по умолчанию - через job.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Позор — это вон тот коммент с tr-ом выше

Задачу ТС (преобразовать столбец в строку через запятую) tr решает? Решает. Завод по сжиганию велосипедостроителей — где-то там →, чуть дальше завода по сжиганию фотографов (который не выдержал нагрузки и сломался).

rebforce
()
Ответ на: комментарий от rebforce

Позор — это вон тот коммент с tr-ом выше

Задачу ТС (преобразовать столбец в строку через запятую) tr решает? Решает.

Ну то есть прочесть чуть дальше того квотинга сил не хватило?

Завод по сжиганию велосипедостроителей

Какая забавная ментальная болезнь.

vodz ★★★★★
()
Ответ на: комментарий от futurama

Зачем танцевать, если можно вместо разделителя / использовать другие разделители, например : ?

grem ★★★★★
()
Ответ на: комментарий от grem

sed с его разделителями это только инструмент для создания экранирования.

futurama ★★★★★
()
Ответ на: комментарий от vodz

Какая забавная ментальная болезнь.

У писателей унылых портянок с IFS там, где можно обойтись одной краткой строкой, ментальные болезни куда серьёзнее.

rebforce
()
Последнее исправление: rebforce (всего исправлений: 1)
Ответ на: комментарий от rebforce

У писателей унылых портянок с IFS там, где можно обойтись одной краткой строкой, ментальные болезни куда серьёзнее.

Для ментально убогих и плоховидящих могу и повторить, что тут уже 2 суток назад откоменчено:

1) tr не подходит из-за последнего перевода строки в файле;

2) я решал задачу Bers666, а не ТСа.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от legolegs

Продолжающим срач: ничего, что правильный вариант с paste уже предложен?

А вы это точно ТСу? Он же молчит как рыба об лёд. Если мне — то paste не решает задачу Bers666.

vodz ★★★★★
()
Ответ на: комментарий от anonymous

Чем же он плох?

Как же этот тупняк уже достал. Тем, что задача была дополнена условиями, которые paste, как «merge lines of files» в принципе не может решить по причине, что там не чистые lines.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

там не чистые lines Болезный, ты хоть сам-то paste попробовал? Какие нечистые lines? Приведи пример входных данных, на которых paste поломается, а твой говнокод отработает.

anonymous
()
Ответ на: комментарий от anonymous

Дяденька, я не виноват, что вы в глаза долбитесь, и так и можете прочитать коммент Столбец в строку (комментарий) , на который был мой скрипт. Осильте хотя бы второе предложение под пунктом 1, убогие.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Ты не отмазывайся, а приведи пример, где paste сломается. На строке с пробелами он не ломается.

anonymous
()
Ответ на: комментарий от anonymous

Что, так и не смог осилить первый пункт? Вот что анонимность делает с людьми.

а приведи пример, где paste сломается.

Что непонятно в том, что оно не «сломается», а не предназначено для этого условия?

paste -sd, <<< '1 2'

Видите там запятую? Правильно, её не может там быть.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Ты либо болен, либо у тебя другой paste. Никакой запятой там нет.

$ paste -sd, <<< '1 2'
1 2
$ cat >list
1111 
2222
3333
$ paste -sd, <list 
1111,2222,3333

anonymous
()
Ответ на: комментарий от anonymous

Никакой запятой там нет.

Удивительно, правда? А в условии было «1. А вдруг в файле 2 слова на 1 строке?» Вот это вдруг и случилось.

Ты либо болен

Всегда интересовало, что вы анонимусы своим тупняком добиваетесь? Чтобы вас все проигнорили и вы разговаривали сами с собой только?

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.