1) Нужно переименовать список директорий из файла $dir_listТак не работает:
#grep -v ^# $dir_list | xargs -n 1 echo mv ${1} ${1}-OFFТак работает:
for dir in `grep -v ^# $dir_list`; do
echo mv ${dir} ${dir}-OFF
done2) Нужно проверить статус (код ответа по http) списка доменов
Так не работает:
awk -F"/" '{print $6;}' result.log | xargs -n 1 curl -s -I $1 | head -1 | awk '{print $2}'Получаем ответ только первого элемента списка awk -F"/" '{print $6;}' result.log , а остальные два десятка элементов игнорируются.
> 2) Нужно проверить статус (код ответа по http) списка доменов
> Так не работает:
>awk -F"/" '{print $6;}' result.log | xargs -n 1 curl -s -I
> $1 | head -1 | awk '{print $2}'
>Нужно логику изменить.
ибо
awk -F"/" '{print $6;}' result.log | xargs -n 1 echo $1
отдает список доменов полностью...
>> 2) Нужно проверить статус (код ответа по http) списка доменов
>> Так не работает:
>> | xargs -n 1 curl -s -I $1 | head -1 | awk '{print $2}'Ты, видимо имел в виду -
...|xargs -I{} --n1 bash -c "curl -s -I {} | head -1" |...
> Нужно логику изменить.
> ибо [ code]
> отдает список доменов полностью...Да, не. Нужно понимать, что-где. Что $1, который ты дал xargs-у будет подставлен не им, а шелом. И вывод xargs-а будет конкатенауией всех запушенных curl-ов. И head -1 от этой сонкатенации будет именно результат (первая строка) только от первого curl-a
.....
На сладкое:<result.log gawk -F/ '{arr[++nn]=$6}END{FS=" ";for(i=1;i<=nn;i++){cmd="curl -s -I "$6";cmd|getline;close(cmd);print $2}'
> .....
> На сладкое:
> <result.log gawk -F/ '{arr[++nn]=$6}END{FS=" ";for(i=1;i<=nn;i++){cmd="curl -s -I "$6";cmd|getline;close(cmd);print 2}'Агкхр... Скука какая.
<result.log gawk -F/ '{arr[++nn]=$6}END{FS=" ";for(i=1;i<=nn;i++){cmd="curl -s -I "arr[i];cmd|getline;close(cmd);print$2}'
>> .....
>> На сладкое:
>> <result.log gawk -F/ '{arr[++nn]=$6}END{FS=" ";for(i=1;i<=nn;i++){cmd="curl -s -I "$6";cmd|getline;close(cmd);print 2}'
> Агкхр... Скука какая.
> <result.log gawk -F/ '{arr[++nn]=$6}END{FS=" ";for(i=1;i<=nn;i++){cmd="curl -s -I "arr[i];cmd|getline;close(cmd);print$2}'После
print$2}
^ unexpected newline or end of string}' --> }}'
>awk -F"/" '{print $6;}' result.log | xargs -n 1 curl -s -I $1 | head -1 | awk '{print $2}'
>Если в скрипте 2 и более раз используется одна и та же утиль, то это ошибка.
> Получаем ответ только первого элемента списка awk -F"/" '{print $6;}' result.log ,
> а остальные два десятка элементов игнорируются.Отседа вывод: нужно обрабатывать возврат каждой отдельно
for i in `awk -F"/" '{print $6;}' result.log`
do
res=$(curl -s -I $i);
if [ $res == че-надо ]
echo $res | head -1 | cut -d" " -f2;
else
continue;
done
...
как-то так
>> Получаем ответ только первого элемента списка awk -F"/" '{print $6;}' result.log ,
>> а остальные два десятка элементов игнорируются.
> Отседа вывод: нужно обрабатывать возврат каждой отдельноБлагодарю.
Скрипт теперь выглядит так:
for i in `awk -F"/" '{print $6;}' result.log`; do
echo -e "$i\t\t`curl -s -I $i | head -1 | cut -d" " -f2;`"
doneСкорость выполнения соответствующих команд равнозначна:
time cut -d"/" -f6 result.log
time awk -F"/" '{print $6;}' result.log
Возможно при обработке гигабайтных файлов будут отличия...
> Возможно при обработке гигабайтных файлов будут отличия...Ты ж знаешь, - как начинаются гигабайты нужно врубать sed.
Но у тебя всё равно узким местом будет curl, поэтому спасут только Perl/Ruby/Python/...
>> Возможно при обработке гигабайтных файлов будут отличия...
> Ты ж знаешь, - как начинаются гигабайты нужно врубать sed.
> Но у тебя всё равно узким местом будет curl, поэтому спасут только
> Perl/Ruby/Python/...В данный момент, да однопоточно.
Но я же могу использовать & и писать результат в отдельный лог.curl самый надежный консольный http клиент.
Для Perl/Ruby/Python/ нужно подключать модули и чем сложнее и навороченнее сайт, тем больше модулей надо подключать :)
> curl самый надежный консольный http клиент.
> Для Perl/Ruby/Python/ нужно подключать модули и чем сложнее и навороченнее сайт, тем
> больше модулей надо подключать :)Когда пойдут гигабайтные логи, задумаешься, почему сразу на перлерубипитоне не написал.
>>awk -F"/" '{print $6;}' result.log | xargs -n 1 curl -s -I $1 | head -1 | awk '{print $2}'
>>
> Если в скрипте 2 и более раз используется одна и та же
> утиль, то это ошибка.Это чушь. У двух авков тут (ты же про них?) совершенно разная область действия.
Вот head можно довольно легко в соседний awk "внести".
В принципе, можно и xarg внести, но тогда пидётся очень вдумчиво понисмать, чего пишешь, возможно, получится GNU awk специфично, и, в конце концов _придётся :) объединить 2 awk-а.
>>>awk -F"/" '{print $6;}' result.log | xargs -n 1 curl -s -I $1 | head -1 | awk '{print $2}'
>>>
>> Если в скрипте 2 и более раз используется одна и та же
>> утиль, то это ошибка.
> Это чушь. У двух авков тут (ты же про них?) совершенно
> разная область действия.Делешь афк основной программой, остальные как его аргументы.
Выше схема: AWK( HEAD( CURL( AWK() )));
переделывается в AWK( HEAD( CURL()), AWK()),
что есть две функции AWK( HEAD( CURL()), AWK()) + AWK(AWK())
и как ты написал - AWK(AWK()) самопоглощается,
и получим:
AWK( HEAD( CURL()), var); , где var - какая-то вспомог. переменная (скорее всего глобальная)Теперь самый гиморp - представить это в виде кода :D
>>>>awk -F"/" '{print $6;}' result.log | xargs -n 1 curl -s -I $1 | head -1 | awk '{print $2}'
>>>>
>>> Если в скрипте 2 и более раз используется одна и та же
>>> утиль, то это ошибка.
>> Это чушь. У двух авков тут (ты же про них?) совершенно
>> разная область действия.
> Делешь афк основной программой, остальные как его аргументы.А по первому вопросу есть мысли?
>> Делешь афк основной программой, остальные как его аргументы.Павлин, глаза выше!
> А по первому вопросу есть мысли?
|xargs -I{} -n1 mv {} {}-OFF
>> А по первому вопросу есть мысли?
> |xargs -I{} -n1 mv {} {}-OFFРаботает!
>>> Делешь афк основной программой, остальные как его аргументы.
> Павлин, глаза выше!Ну не заметил...