LINUX.ORG.RU

как преобразовать запись столбика в строчку в bash

 ,


0

1

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

1656027

1656028

1656033

1656034

1656050

1656054

1656055

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

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

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



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

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

anonymous
()

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

awk [code] awk ‘printf «%s,»,$1;}’ file-stolbik [/code]

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

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

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

 cat file-stolbik | tr '\015\012' ' ,' 

awk

 awk '{printf "%s,",$1;}' file-stolbik

sed

 echo `sed -e 's/$/,/g' file-stolbik`

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

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

mapfile -t a; IFS=,; echo "${a[*]}"

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

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

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

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

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

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

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

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

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

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

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

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

Другие варианты позволяют получить и передать текстовый поток.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
... | paste -s -d ','

Пример:

printf '%s\n' str1 str2 str3
str1
str2
str3
printf '%s\n' str1 str2 str3 | paste -s -d ','
str1,str2,str3

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

Спасибо всем еще раз! Проблема решена хоть и в несколько шагов. Скрипт работает.

Кстати команду «paste» возьму на заметку, еще нигде не встречалась.

helen77
() автор топика

Если бы не было нужды вставлять запятую как разделитель, то можно было бы xargs
cat встолбик.txt | xargs echo
а с разделителем - paste -s -d

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