Есть два структурированных как таблицы файла, один достаточно большой.
Одно поле у них совпадает.
Как выбрать строки в которых эти поля совпадают?
Вообще, в большой таблице нужно поле "связки" заменить на имя "ключа" из маленькой таблица. А уж отобрать записи которые нужны не проблемаНа sql это 5 строк, но в базу со своими таблицами я влезть не могу, потому нужно сделать на шелле. Очень не хочется это делать потом, типа, на Аксессе
Привет,Если Perl устраивает, можно сделать так:
1. Читаем маленький файл, делаем в памяти hash из значении "ключ" - "стоимость".
2. Перебираем весь большой файл строка за строкой, делаем split каждой страки по delimiter-у (табулятор, запятая или то, что там у вас) в массив, заменяем N-ный элемент масива стоимостью того элемента hash-а, у которого ключ - сам N-ный элемент массива.Строк будет не 5, но врад ли более 10-и :-)
WWell,
>Привет,
>
>Если Perl устраивает, можно сделать так:
>
>1. Читаем маленький файл, делаем в памяти hash из значении "ключ" -
>"стоимость".
>2. Перебираем весь большой файл строка за строкой, делаем split каждой страки
>по delimiter-у (табулятор, запятая или то, что там у вас) в
>массив, заменяем N-ный элемент масива стоимостью того элемента hash-а, у которого
>ключ - сам N-ный элемент массива.
>
>Строк будет не 5, но врад ли более 10-и :-)
>
>WWell,
Дайте строчку про hash
Я не знаю перла, но немного видел, пойму.Я бы это на php сделал, но его там нет. Все права обрезали, блин, уроды. И, ладно бы, оправдано...
Привет,"man perlfunc" везде, где непонятен синтаксис.
Что-то вроде:
---
#!/usr/bin/perl
open (SMALL_FILE, "small_file.txt") || die "Failed to open SMALL_FILE";
while (!eof(SMALL_FILE)) {
$line = <SMALL_FILE>;
chomp $line;
($key, $hash{$key}) = split(/\ /,$line);
}
close SMALL_FILE;open (BIG_FILE, "big_file.txt") || die "Failed to open BIG_FILE";
while (!eof(BIG_FILE)) {
$line = <BIG_FILE>;
@line_parts = split(/\ /,$line);
$line_parts[1] = $hash{$line_parts[1];}
for ($i=0; $i<@line_parts; $i++) {print $line_parts[$i];}
print "\n";
}
close BIG_FILE;---
WWell,
>Есть два структурированных как таблицы файла, один достаточно большой.
>Одно поле у них совпадает.
>Как выбрать строки в которых эти поля совпадают?
>Вообще, в большой таблице нужно поле "связки" заменить на имя "ключа" из
>маленькой таблица. А уж отобрать записи которые нужны не проблема
>
>На sql это 5 строк, но в базу со своими таблицами я
>влезть не могу, потому нужно сделать на шелле. Очень не хочется
>это делать потом, типа, на Аксессеподозреваю, что man join поможет