![]() |
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| Shell скрипт для извлечения текста из файла | vignesh53 | Shell программирование и сценарии | 3 | 02-05-2008 08:16 AM |
| Сообщить о файле добычи основаны на дату | ganapati | Shell программирование и сценарии | 2 | 07-13-2006 12:26 PM |
| Дата-извлечения из файла в KSH | homer_hn | Shell программирование и сценарии | 6 | 04-21-2006 02:51 AM |
| Нужна помощь добавлением строк / объединения строк в файл ... | mr_manny | Shell программирование и сценарии | 2 | 01-06-2006 06:45 PM |
| Файл справки по добыче | apalex | UNIX для чайников Вопросы И Ответы | 1 | 05-01-2001 11:29 PM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
Добыча различных линий с Хью файл
Уважаемые члены,
У меня есть огромный файл, порожденных команду "WHOIS" для сотен IP-адресов. Каждый раздел файла начинается с [Запрос WHOIS Я хочу, чтобы извлечь эти строки, которые начинаются с любой из этих слов: [Запрос WHOIS, OrgName, NetRange, inetnum, описание, владелец, страна в этом разделе. Введите: [Запрос whois.XJHIOUIIOOPIOP] OrgName: Университет C OrgID: U1 Адрес: ОИТ Адрес: NH Город: BC StateProv: XY Почтовый индекс: 000000 Страна: MN NetRange: XXX.YYY.MN - XXX.YYY.MQ CIDR: LMANERIE NetName: UC [Запрос whois.ABCE.TSD] % Человека ограничен авторскими правами. % См. % Примечание: Этот вывод был отфильтрованы. % Чтобы получить выход для обновления базы данных, использовать "-B" флаг inetnum: XXX.YYY.MN - XXX.YYY.MQ netname: NET-C Описание: HB Описание: Университет Страна: PQ Admin-C: TYE тек-с: SDF Статус: FGRG по шоссе: FSDGFG Источник: FGDFSG роль: OPRROKROTR Адрес: Университет Адрес: DJFIEJRE Адрес: DIJAIRJEJ Адрес: EIREROERE Необходимый вывод: [Запрос whois.BUHIOUJIOU] OrgName: HHHHHHHHHH (может быть или нет) NetRange: TTTTTTTTT (может быть или нет) inetnum: FTYFYYYUII (может быть или нет) Описание: HIJKJKLLKL (она будет лучше, если только первое появление) Владелец: JHKJOJOIPI (может быть или нет) Страна: OIOPOPOP (1 появления) Поблагодарив вас Что касается |
|
||||
|
Различные регистраторы используют различные форматы вывода. Итак, если вы не запросив весьма ограниченный набор доменов, например, все домены регистрируются одно лицо, или по другим причинам, все зарегистрированные в этом же регистратора или только небольшой набор регистраторов, это может оказаться более сложным, чем вы думали .
Возможно, было бы целесообразно в качестве первого шага на отдельные записи в разные файлы в зависимости от [Запрос ... линию? Попробуйте csplit Команда за это. Затем вы можете создать парсер для каждого из форматов, вы найдете здесь. Как вы знаете, когда остановиться? Часто запись будет включать иерархической информации (особенно для ARIN информацию, которая является то, что ваш пример ABCE.TSD похоже), в котором позже линий более конкретным, чем предыдущие. Тогда вам часто требуется позже линий, а не ранее. (Но это зависит от того, что вам нужно для этого, конечно же.) Во всяком случае, здесь, в попытке осуществления текущей спецификации. Это просто выбирает первый из ничего после Запрос строки: Код:
perl -ne 'if (/^\[Querying/) {
print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
$wanted = &wanted(@wanted);
}
sub wanted {
return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
if ($wanted && $_ =~ m/$wanted/i) {
print;
@wanted = grep { $_ ne $1 } @wanted;
$wanted = @wanted ? &wanted(@wanted) : "";
}' file
(Оглядываясь назад, возможно, было бы лучше использовать хэш отслеживать ценностей, которые уже захватили, а не захвата, если хэш говорится у нас уже есть один мы рассматриваем. Задвиньте захватили один из них в случае сохранения массива тем имеет важное значение.) Последний раз редактировалось эры; на 04-27-2008 08:53 AM.. Основание: Добавить / I флага внести соответствующие игнорировать дело |
|
||||
|
Привет,
Большое спасибо за помощь. Этот сценарий является очень полезным до 70% моих потребностей. Я буду пытаться делать что-то для отдыха из моих 30%. Поблагодарив вас Что касается Сатьи |
|
||||
|
Уважаемые Эры,
Я хочу, чтобы сценарий должен принимать входной файл в качестве переменной, а в качестве выходного файла. У меня есть два текстовых файлов: (1) список папок, в которых следует работать скрипт (2) Список входных файлов, по которым скрипт должен работать. Из-за отсутствия Perl знание Я попытался безуспешно. В Shell скрипт я использую: Я в `(CAT countries.txt)` делать для J в `(CAT year.txt)` делать Для K в `(кошки страны / $ I / $ J)` делать Те же образом я хочу, чтобы Perl Сценарий принять inputfile переменными Спасибо |
|
||||
|
Что касается корпуса кодирование стиля, в скобках указаны полностью нет необходимости, и прочее в backticks работает плохо, если есть имя файла с пробелами в нем.
Я не понимаю, почему вы не можете использовать этот скрипт, чтобы оберните Perl код; ничего нет, которая существует много Perl делает лучше, чем корпуса, помимо, не читать страны файл снова и снова (но можно оптимизировать, что в скрипт, тоже). Но во всяком случае, здесь идет. Боюсь, это абсолютно непроверенными. Код:
#!/usr/bin/perl
die "Usage: $0 dir yearfile countryfile" unless (@ARGV == 3);
open (Y, "$ARGV[1]") || die "$0: Could not open $ARGV[1]: $!\n";
open (C, "$ARGV[2]") || die "$0: Could not open $ARGV[2]: $!\n";
my @countries = <C>;
close C;
while ($year = <Y>) {
for $country (@countries) {
handle ("$ARGV[0]/$year/$country");
}
}
close Y;
sub handle {
my ($file) = @_;
open (F, $file) || die "$0: Could not open $file: $!\n";
while (<F>) {
if (/^\[Querying/) {
print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
$wanted = &wanted(@wanted);
}
if ($wanted && $_ =~ m/$wanted/i) {
print;
@wanted = grep { $_ ne $1 } @wanted;
$wanted = @wanted ? &wanted(@wanted) : "";
}
close F;
}
}
sub wanted {
return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
|
|
||||
|
Большое спасибо за код
Привет |
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|