Pull to refresh

Comments 24

Просто подумал, что, возможно, не всегда удобно использовать _$ и -n. С тем же xargs например ls | ruby -lne 'puts $_[0..9]' можно переписать как ls | xargs ruby -e 'ARGV.each { |file| puts file[0..9] }'. Хотя конкретно для этого кейса ваш код выглядит поприятнее

Ну, в посте разбирается построчная обработка. Я сомневаюсь, что использование ARGV когда-нибудь будет удобнее в этом плане.
Хотя все возможно:)

Преимущество ARGV, как мне кажется, только в том, что в скрипте имеешь доступ ко всем аргументам сразу (в итерации можно, например, использовать предыдущий)

ага, именно) разве что так сразу пример не подобрать, когда может понадобиться.

В любом случае я бы использовал $< вместо ARGV:


ls | ruby -e '$<.each_with_index { |s, i| puts "#{i+1}: #{s}" }'

# vs

ls | xargs ruby -e 'ARGV.each_with_index { |s, i| puts "#{i+1}: #{s}" }'
$< выглядит как прекрасная альтернатива, да, xargs + ARGV будет полезен когда нужны все аргументы сразу, типа для случая ARGV.join или ARGV[0] + ARGV[-1], скорее не для построчной обработки, что вы в общем и сказали, конечно зависит от количества входных данных и всегда можно заюзать ARGF если захотеть, я бы сказал, что по ситуации надо выбирать
Можно распараллелить обработку:
ls | xargs ruby -e 'require "parallel"; Parallel.each(ARGV) { |s| puts s.upcase }'

Спасибо за идею!


можно написать -r parallel, чтобы не перенасыщать строку кода:


ls | xargs ruby -r parallel -e 'Parallel.each(ARGV) { |s| puts s.upcase }'
или можно просто научиться awk и sed, и особо много времени на это не нужно

А если Вам потребуется что-то мелкое, но выходящее за рамки знаний? Вы пойдете гуглить нужный инструмент и потом будете читать мануал к нему?
Вы тогда изучать инструмент будете дольше, чем решать задачу (в единственном числе), для которой он Вам нужен.


В случае с ruby/perl/etc Вы, запомнив по сути всего парочку фактов, получаете швейцарский нож, с помощью которого можете сделать, что угодно.


Это хорошо, если человек знает awk+sed. Он решит задачу, скорее всего, красивее, чем с помощью руби/перл. Но это при условии, что он знает. Мне вот это пригождается не так часто, чтобы я постигал прелести awk (которым я раньше временами пользовался) и пытался держать их в голове.

Нет, не поймите неправильно, против ruby ничего не имею) сам на нем пишу скрипты где не хватает просто bash'a, например если нужно дроплетов на digitalocean создать пачку (что собственно можно и на bash с использованием curl сделать, но да, на ruby удобнее и короче) или выполнить действительно сложную обработку текста. Но ради реверс cat ruby вызывать дело такое. Тем более ruby по умолчанию далеко не везде присутствует, в отличии от awk и sed. Если уж вы работаете с unix like системами, не плохо бы изучить встроенные возможности, а не изобретать велосипеды имхо

Зачем что-то делать, если можно этого не делать?:)


Нужно стараться сбалансировать изучаемую информацию. Я вот не хочу потратить на изучение чего-то полдня, чтобы потом все забыть и при надобности читать заново.


Ruby я пользуюсь постоянно и забыть я ничего не могу. Логично, что если мне нужно выполнить какую-то мелкую задачу, я воспользуюсь им и получу результат мгновенно, а не буду курить маны весь день, чтобы одну строчку написать

Затем что половина таких программистов потом права на файл нормально выставить не могут, потому что "мне лень запоминать эти цифры, я знаю что с 777 у меня все работает"

Не особо понимаю, как коррелируют изучение основ ОС *nix с изучением awk/sed.

Тем что это coretools, такой же как mv, ls и т.п.
Например если вам придётся делать те же мелкие задачи на удаленном сервере, где руби нет и установить не вариант

perl тоже есть практически везде.


И я с недоверием отношусь к аргументации вида "если вам придется". Для меня это не аргумент. Человек для себя сам расставляет приоритеты.
Летая на Камчатку я рискую потерпеть крушение где-нибудь в горах. Однако это для меня не повод изучать основы выживания в дикой природе.


Тут главное не перегнуть. Изучение awk/sed — это явный оверхед.


P.S. Я, кстати, изучал awk и даже использовал. Вот только спустя какое-то время знания уходят.

Perl да, ruby нет. Опустим sed и awk, из начала статьи понятно что у вас cat и его ключи уже вызывают оверхед. Вы find видели хоть раз? На понимание sed и awk, в рамках описанных вами кейсов, уходит 10 минут. А если вы действительно это поймёте то и запоминать особо ничего не нужно. Ах да, regexp же ещё нужно понимать, но если и тут мимо, то и разработчик вы посредственный.

Т.е. вы считаете, что нужно изучать перл?:)
У меня для вас плохие новости: не нужно.


При чем здесь cat? При том, что я привел пример вывода текста? Во-первых, это было просто ради того, чтобы показать работу параметров ruby, во-вторых, эту задачу невозможно решить только с помощью cat. Ну и вообще попахивает неуместной желчью.


find? видел. Использовал. Не использую.


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

Невозможно решить задачу с cat?) Про tac file.txt вы конечно не слышали.

То что вы называете "курить полдня маны" на самом деле называется основами работы в командной строке) Видимо описанный вами лайфхак только и применяется чтобы сериалы у себя на компе переименовать.

Именно так! В этом и суть: для мелких задач, когда изучение proper tools — это оверхед

С таким подходом пишите на ruby в windows, Linux вам не нужен

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

Да, вы просто сеите дурную манеру. Курите лучше маны)

Sign up to leave a comment.

Articles