[shell][how-to] смешать два файла
ненавижу shell
#!/usr/local/bin/perl -wT
use strict;
local (*F1, *F2);
my ($f1, $f2);
open(F1, "<", "/etc/passwd") or die;
open(F2, "<", "/etc/group") or die;
while ($f1 = <F1>, $f2 = <F2> ) {
print("$f1$f2");
}
если файлы маленькие, то можно вывести их в массивы строк f1, f2
а потом вывести соответствующим образом в файл (в цикле)
на перле выглядит проще
а потом вывести соответствующим образом в файл (в цикле)
на перле выглядит проще

> ненавижу shell
глеб, я не спрашивал твоего мнения о shell'е.
ps: perl не подходит
глеб, я не спрашивал твоего мнения о shell'е.
ps: perl не подходит
[PL/SQL][how-to] хочу написать 3D-шутер. Другие языки не предлагать.
маза сделать через
и все в цикл for по $i от 1 до `wc file1`
cat file1 | head $i | tail 1 >> newfile
cat file2 | head $i | tail 1 >> newfile
и все в цикл for по $i от 1 до `wc file1`

> [PL/SQL][how-to] хочу написать 3D-шутер. Другие языки не предлагать.
если ты серьезно - вперед. если нет - зачем ебать мозг?
если ты серьезно - вперед. если нет - зачем ебать мозг?
когда говорят shell, обычно подразумевают, что доступны стандартные утилиты
многие считают, что perl относится к таким
многие считают, что perl относится к таким
cat file1 | head $i | tail 1 >> newfile
cat file2 | head $i | tail 1 >> newfile
и все в цикл for по $i от 1 до `wc file1`
О! Как это напоминает мне увлекательный процесс сшивания франкенштейна. 3 exec на каждую строчку, всасывание файла столько раз, сколько в нем строчек. Прогон через пайпы объема данных превышающего объем файла на порядки.Франкенштейн как правило потом медленно ходит и часто спотыкается, зато большой и устрашающий.
P.S. Сегодня ходил на Ван-Хельсинга. Там очень милый Франкенштейн.
nl -i 2 -v 1 -s '::'F1 >_F nl -i 2 -v 2 -s '::'F2 >>_F sort _F |sed 's/^[^:]*:://'>__F
то есть:
nl -i2 -v1 -s'::' F1 >_F
nl -i2 -v2 -s'::' F2 >>_F
sort _F | sed 's/^[^:]*:://' >__F
Твой франкенштейн поменьше и будет работать существенно быстрее, чем приведенная ранее альтернатива. Поздравляю. Однако на действительно больших файлах sort выжрет очень много памяти. Кроме того, на действительно больших файлах тебе потребуется много свободного места на файловой системе. Ну и конечно тебе нужна rw файловая система. А perlовое решение обходится без неё. Следующим важным моментом будет защита скрипта от самого себя, в смысле от парраллельного запуска. __F нужно заменить на $(mktemp bla-bla-bla а ведь это сразу в голову не пришло, не так ли? Таких вот моментов в шелльном программировании масса.
P.S. Одно из важных свойств шелльного программирования - увлекательность. Можно придумать несколько разных франкенштейнов и обсуждать их преимущества друг перед другом. Программирование на perlе таких задач намного более прямолинейно и скучно. Приведенное мною решение приходит в голову за 5 секунд, и является оптимальным. Дальше работа спинного мозга - настучать на клаве текст. Альтернативные решения будут извратами. Кроме того, моя программа легко читается, чего не скажешь о шелльных франкенштейнах. Её нельзя назвать красивой - она проста как валенок. Франкенштейны же всегда содержат какой-то хитрый прием, делаюший честь их создателю и тешущий его самолюбие.
P.P.S. Не злитесь на меня. Месяц назад я два дня работал над оптимизацией длинного шелльного скрипта написанного моим сотрудником. Я сделал его быстрее в 3-4 раза и завернул там еще несколько красивых приемов. Я получал от этого удовольствие. Шелл дает возможность получать удовольствие от решения тривиальных задач.
P.S. Одно из важных свойств шелльного программирования - увлекательность. Можно придумать несколько разных франкенштейнов и обсуждать их преимущества друг перед другом. Программирование на perlе таких задач намного более прямолинейно и скучно. Приведенное мною решение приходит в голову за 5 секунд, и является оптимальным. Дальше работа спинного мозга - настучать на клаве текст. Альтернативные решения будут извратами. Кроме того, моя программа легко читается, чего не скажешь о шелльных франкенштейнах. Её нельзя назвать красивой - она проста как валенок. Франкенштейны же всегда содержат какой-то хитрый прием, делаюший честь их создателю и тешущий его самолюбие.
P.P.S. Не злитесь на меня. Месяц назад я два дня работал над оптимизацией длинного шелльного скрипта написанного моим сотрудником. Я сделал его быстрее в 3-4 раза и завернул там еще несколько красивых приемов. Я получал от этого удовольствие. Шелл дает возможность получать удовольствие от решения тривиальных задач.
Приведенное мною решение приходит в голову за 5 секунд, и является оптимальным.Исус Христос?

Оно любому человеку приходит в голову за 5 секунд. Насчет оптимальности - вперед, оспаривай. Приводи другие примеры.
глеб, не зачем так сильно переживать. я ценю предоставленое тобой решение на перле и уважаю твое мнение. но если тебя так сильно анноит существование шелла - не пользуйся им, когда все поступят как ты - он вымрет. выражая же свое негодование публично - ты только лишь привлекаешь внимание к объекту.
\\Там очень милый Франкенштейн
[offtopic]
типа чиста для справки- франкенштейн- это профессор, который создал монстра. сам монстр не франкенштейн, а "чудовище фрнакенштейна"
[/offtopic]
[offtopic]
типа чиста для справки- франкенштейн- это профессор, который создал монстра. сам монстр не франкенштейн, а "чудовище фрнакенштейна"
[/offtopic]
да, точно проф. д.ф.-м.н. Виктор Франкенштейн
while read -u 3 a ; read -u 4 b ; do echo $a; echo $b ; done 3<file1 4<file2
Да, прав Глеб по поводу увлекательности шельного программирования...
while read -u 3 a ; read -u 4 b ; do echo $a; echo $b ; done 3<file1 4<file2Извините, это не шелл, это bash. Встроенная команда read в sh описана тут. Поэтому этот франкенштейн не допускается к соревнованиям. Пока лидирует решение через nm + sort.
while read a <&3 ; read b <&4; do echo $a; echo $b ; done 3<file1 4<file2
Супер! Учитывая, что echo встроенная команда, данный метод может соревноваться с перлом. Однозначно победитель!
Видишь, шелл рулит, и ничего с этим не поделать 

Оставить комментарий
state7401281
дано два файла, по N строк, в строках - например число.нужно "смешать" эти два файла через строку.
т.е. {1,2,3} и {4,5,6} -> {1,4,2,5,3,6}?