Size: a a a

2020 December 17

g

gibzer in use Perl or die;
Sergey Zhmylove
Можешь показать конкретный код для обоих вариантов?
Когда сравнивал, был ещё кривой вариант на Perl. Суть, что надо было отрезать первое "плохое" значение (оно без `=`).

#!/usr/bin/env python3

import fileinput

f = ['status', 'vhost', 'request', 'ip', 'user_agent']
for s in fileinput.input():
   F = dict(tuple([x.split('=', 1) for x in s.strip().split('\t')[1:]]))
   print('\t'.join([F[x] for x in f]))


perl -ne 'chomp; s/^log\t//; %F = map { split(/=/, $_, 2) } split(/\t/); printf "%s\n", join("\t", @F{@f}); BEGIN { @f = qw(a c e g i) }'

Надо перетестировать новый вариант.
источник

SZ

Sergey Zhmylove in use Perl or die;
gibzer
Когда сравнивал, был ещё кривой вариант на Perl. Суть, что надо было отрезать первое "плохое" значение (оно без `=`).

#!/usr/bin/env python3

import fileinput

f = ['status', 'vhost', 'request', 'ip', 'user_agent']
for s in fileinput.input():
   F = dict(tuple([x.split('=', 1) for x in s.strip().split('\t')[1:]]))
   print('\t'.join([F[x] for x in f]))


perl -ne 'chomp; s/^log\t//; %F = map { split(/=/, $_, 2) } split(/\t/); printf "%s\n", join("\t", @F{@f}); BEGIN { @f = qw(a c e g i) }'

Надо перетестировать новый вариант.
Подожди ещё :)
источник

SZ

Sergey Zhmylove in use Perl or die;
Тебе надо для каждой строки вытащить значения a c e g i, так?
источник

YK

Yegor K in use Perl or die;
gibzer
Как сделать, чтобы при сплите получалось ровно столько значений, сколько задано в лимите?
То есть я хочу получить тут
perl -M'Data::Dumper' -e '@t = split(/=/, "ab", 2); print Dumper(\@t);'
вместо
$VAR1 = [
         'ab'
       ];

такое
$VAR1 = [
         'ab',
         undef
       ];
(split /=/, 'ab', 2)[0,1]
источник

g

gibzer in use Perl or die;
Sergey Zhmylove
Тебе надо для каждой строки вытащить значения a c e g i, так?
Да.
источник

SZ

Sergey Zhmylove in use Perl or die;
gibzer
Да.
Они могут в строках повторяться? Типа a=1\ta=2?
источник

g

gibzer in use Perl or die;
Sergey Zhmylove
Они могут в строках повторяться? Типа a=1\ta=2?
Нет.
источник

SZ

Sergey Zhmylove in use Perl or die;
gibzer
Нет.
В каждой строке одинаковое их количество? Или где-то, например, может не быть e?
источник

g

gibzer in use Perl or die;
Yegor K
(split /=/, 'ab', 2)[0,1]
О, про слайс не подумал. Тогда можно без переменных.
источник

SZ

Sergey Zhmylove in use Perl or die;
gibzer
О, про слайс не подумал. Тогда можно без переменных.
Короткий код != Быстрый код
источник

g

gibzer in use Perl or die;
Sergey Zhmylove
В каждой строке одинаковое их количество? Или где-то, например, может не быть e?
Одинаковое.
источник

SZ

Sergey Zhmylove in use Perl or die;
Ща
источник

g

gibzer in use Perl or die;
Sergey Zhmylove
Короткий код != Быстрый код
Ну вот как быстрее? )
источник

SZ

Sergey Zhmylove in use Perl or die;
У меня просто совещание сейчас, но интересно попробовать разные варианты. Я напишу парочку тебе для теста :)
источник

g

gibzer in use Perl or die;
Sergey Zhmylove
Короткий код != Быстрый код
($k, $v) = split(/=/, $_, 2) быстрее (split(/=/, $_, 2))[0,1] ?
источник

SZ

Sergey Zhmylove in use Perl or die;
gibzer
($k, $v) = split(/=/, $_, 2) быстрее (split(/=/, $_, 2))[0,1] ?
На первый взгляд нет, но надо смотреть.
источник

g

gibzer in use Perl or die;
Sergey Zhmylove
У меня просто совещание сейчас, но интересно попробовать разные варианты. Я напишу парочку тебе для теста :)
Спасибо! ) У меня уже у самомго спортивный интерес к этой задаче. Так-то рабочих вариантов уже куча была.
источник

SZ

Sergey Zhmylove in use Perl or die;
gibzer
Спасибо! ) У меня уже у самомго спортивный интерес к этой задаче. Так-то рабочих вариантов уже куча была.
Я забыл главный вопрос: в каком формате ты хочешь результат?
источник

g

gibzer in use Perl or die;
Sergey Zhmylove
Я забыл главный вопрос: в каком формате ты хочешь результат?
Значения нужных полей через табуляцию.
источник

SZ

Sergey Zhmylove in use Perl or die;
gibzer
Значения нужных полей через табуляцию.
А там где undef -- две табуляции?
источник