[shell][how-to] смешать два файла
#!/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");
}
а потом вывести соответствующим образом в файл (в цикле)
на перле выглядит проще
глеб, я не спрашивал твоего мнения о shell'е.
ps: perl не подходит
[PL/SQL][how-to] хочу написать 3D-шутер. Другие языки не предлагать.
cat file1 | head $i | tail 1 >> newfile
cat file2 | head $i | tail 1 >> newfile
и все в цикл for по $i от 1 до `wc file1`
если ты серьезно - вперед. если нет - зачем ебать мозг?
многие считают, что 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
P.S. Одно из важных свойств шелльного программирования - увлекательность. Можно придумать несколько разных франкенштейнов и обсуждать их преимущества друг перед другом. Программирование на perlе таких задач намного более прямолинейно и скучно. Приведенное мною решение приходит в голову за 5 секунд, и является оптимальным. Дальше работа спинного мозга - настучать на клаве текст. Альтернативные решения будут извратами. Кроме того, моя программа легко читается, чего не скажешь о шелльных франкенштейнах. Её нельзя назвать красивой - она проста как валенок. Франкенштейны же всегда содержат какой-то хитрый прием, делаюший честь их создателю и тешущий его самолюбие.
P.P.S. Не злитесь на меня. Месяц назад я два дня работал над оптимизацией длинного шелльного скрипта написанного моим сотрудником. Я сделал его быстрее в 3-4 раза и завернул там еще несколько красивых приемов. Я получал от этого удовольствие. Шелл дает возможность получать удовольствие от решения тривиальных задач.
Приведенное мною решение приходит в голову за 5 секунд, и является оптимальным.Исус Христос?
Оно любому человеку приходит в голову за 5 секунд. Насчет оптимальности - вперед, оспаривай. Приводи другие примеры.
глеб, не зачем так сильно переживать. я ценю предоставленое тобой решение на перле и уважаю твое мнение. но если тебя так сильно анноит существование шелла - не пользуйся им, когда все поступят как ты - он вымрет. выражая же свое негодование публично - ты только лишь привлекаешь внимание к объекту.
[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}?