Size: a a a

2021 March 18

V

Vikentsi in pro.bash
Женя Добромильский
Круто, спасибо! Это с файлами, я так понял. А если у меня две многострочные переменные, их туда как-то можно запихнуть? Или чтобы f2, например, был выхлопом функции (потом | awk...), а f1 - многострочная переменная.
Многострочная переменная ? А покажите как выглядит такая конструкция?
источник

ЖД

Женя Добромильский... in pro.bash
Vikentsi
Многострочная переменная ? А покажите как выглядит такая конструкция?
listoffiles="ls -1"
источник

ЖД

Женя Добромильский... in pro.bash
ls -1 - кроме двойных ещё и в одинарных кавычках. Телеграм их стёр
источник

ЖД

Женя Добромильский... in pro.bash
Vikentsi
Многострочная переменная ? А покажите как выглядит такая конструкция?
мне надо в качестве файлов f1 и f2 использовать выхлопы двух сложных функции
источник

аᶘ

асоциальный пикотран... in pro.bash
Женя Добромильский
ls -1 - кроме двойных ещё и в одинарных кавычках. Телеграм их стёр
можно использовать process substitution:
cat <(echo 1) <(echo 2)
источник

ЖД

Женя Добромильский... in pro.bash
спасибо! задача решена :)
источник

V

Vikentsi in pro.bash
Женя Добромильский
мне надо в качестве файлов f1 и f2 использовать выхлопы двух сложных функции
Вот в переменные файлы складировать. Оно конечно можно. Но я бы рекомедовал поискать путь без этого.
источник

V

Vikentsi in pro.bash
Женя Добромильский
Доброго времени суток.
Скажите, как объединить (желательно awk-ом со всякими regexp-ами, но на крайняк можно и чем-то другим) два списка таким вот образом:
список1
а
б
в

список2
-1г
-2д
-3е

результат
а-1г
а-2д
а-3е
б-1г
б-2д
б-3е
в-1г
в-2д
в-3е
А команда paste ? Она вроде так и делает?
источник

ЖД

Женя Добромильский... in pro.bash
Vikentsi
А команда paste ? Она вроде так и делает?
мне просто к каждой строке первого списка надо поприбавлять все строки из второго
источник

V

Vikentsi in pro.bash
Женя Добромильский
мне просто к каждой строке первого списка надо поприбавлять все строки из второго
А не. Она попарно. Те нужно в исходном списке увеличить кол-во например а в 3 раза. И потом paste норм сожрет
источник

V

Vikentsi in pro.bash
Но я пока это решение написал :) мне оно сложным показалось хотя код будет не сильно навороченным.
источник

ЖД

Женя Добромильский... in pro.bash
Vikentsi
А не. Она попарно. Те нужно в исходном списке увеличить кол-во например а в 3 раза. И потом paste норм сожрет
ну там списки непредсказуемой длины :) @alukardd верно подсказал. С выхлопом ls работает, а в моём скрипте пока нет.
источник

V

Vikentsi in pro.bash
Женя Добромильский
ну там списки непредсказуемой длины :) @alukardd верно подсказал. С выхлопом ls работает, а в моём скрипте пока нет.
А посчитать длину второго списка? Или там потоком?
источник

ЖД

Женя Добромильский... in pro.bash
Vikentsi
А посчитать длину второго списка? Или там потоком?
в принципе, можно поток превратить в многострочную переменную, потом размножить каждую строку по нескольку раз, потом сделать paste, но скрипт и так тяжёлый, не охота сильно нагружать. потому я и хотел однострочную команду типа awk использовать
источник

ЖД

Женя Добромильский... in pro.bash
А можете ещё подсказать, как мне awk-ом из строк таблицы извлечь первое поле и поле, начинающееся с определённых символов и заканчивающееся двоеточием, или переводом строки? Вот мне надо извлечь значение между Type= и : (или переводом строки). Как первое поле извлекать, я знаю :)

Таблица такая ($themeTable):
relative/path1:Size=20:Type=Color:Form=Square
relative/path2:Size=20:Form=Round:Type=BW
relative/path3:Type=Color:Size=15:Form=Square
relative/path4:Size=15:Form=Square:Type=Color
...

Сейчас я использую такой алгоритм:
contextList=`paste -d: <(echo "$themeTable"|grep "Form=$1"|cut -d: -f1|awk -v m=$themeAbsPath '{print m "/" $0 "/"}') <(echo "$themeTable"|grep "Form=$1"|sed 's/.*Type=\(.*\)$/\1/g'|cut -d: -f1)`
Но он подтормаживает, и мне кажется, есть способ проще.
источник

∀lǝxǝʎ in pro.bash
все умеют делать
берёшь и размечаешь заного
источник

¯

¯\_(ツ)_/¯ in pro.bash
∀lǝxǝʎ
все умеют делать
берёшь и размечаешь заного
Я не туда кинул, извини
источник

∀lǝxǝʎ in pro.bash
Женя Добромильский
А можете ещё подсказать, как мне awk-ом из строк таблицы извлечь первое поле и поле, начинающееся с определённых символов и заканчивающееся двоеточием, или переводом строки? Вот мне надо извлечь значение между Type= и : (или переводом строки). Как первое поле извлекать, я знаю :)

Таблица такая ($themeTable):
relative/path1:Size=20:Type=Color:Form=Square
relative/path2:Size=20:Form=Round:Type=BW
relative/path3:Type=Color:Size=15:Form=Square
relative/path4:Size=15:Form=Square:Type=Color
...

Сейчас я использую такой алгоритм:
contextList=`paste -d: <(echo "$themeTable"|grep "Form=$1"|cut -d: -f1|awk -v m=$themeAbsPath '{print m "/" $0 "/"}') <(echo "$themeTable"|grep "Form=$1"|sed 's/.*Type=\(.*\)$/\1/g'|cut -d: -f1)`
Но он подтормаживает, и мне кажется, есть способ проще.
awk -F: '{type=""; for (i=1; i<=NF; i++) { if ($i ~ /^Type/) { gsub(/^Type=/,"",$i); type=$i}}; print $1,type}'
источник

∀lǝxǝʎ in pro.bash
я не вчитывался в то что Вы там понаписали у себя в команде, но судя по тому что я вижу там grep From=, то словами описано явно не всё условие, так что могу сказать, что grep тоже можно убрать. и поставить это условие внутри awk, хотя это и не всегда лучше
источник

ЖД

Женя Добромильский... in pro.bash
∀lǝxǝʎ
я не вчитывался в то что Вы там понаписали у себя в команде, но судя по тому что я вижу там grep From=, то словами описано явно не всё условие, так что могу сказать, что grep тоже можно убрать. и поставить это условие внутри awk, хотя это и не всегда лучше
Возможно. Да. Я новичок в скриптинге и вообще, программировании. Спасибо!
источник