ioctl: недействительный аргумент для HDIO_GET_IDENTITY

Вы, вероятно, хотите, чтобы что-то вроде этого проанализировало Ваш журнал:

#!/bin/awk -f
{
    if (/was successful/) {
        bn = $2;
        gsub(/'/, "", bn);
        succ[bn] = 1;
    }
    if (/Processing batch/) {
        bn = $7;
        gsub(/'/, "", bn);
        if (bn in succ) {
            succ[bn,",s"] = $2;
            getline
            succ[bn,",e"] = $2;
        } else
            fail[bn] = 1;
    }
}
END {
    for (val in succ)
        if (val !~ /,/)
            print val " " succ[val,",s"] " " succ[val,",e"];
    for (val in fail)
        print val " encountered an error";
}

Ваш исходный сценарий, немного уменьшенный всего до 1 awk звоните под некоторыми strict1 предположениями по поводу структуры своих входных данных).

#!/bin/ksh

fname=$1

for batchname in $(grep -i "Processing batch" $fname | cut -d "'" -f2); do
    Batch_state=`grep -c -i "Batch '$batchname' was successful" $fname`
    if [[ "$Batch_state"  -ge 1 ]]; then
        awk -v b=$batchname '
{
    if ($0 ~ "Processing.*" b) {
        s = $2;
        getline;
        e = $2;
        print b " " s " " e;
        exit
    }
}' $fname
    else
        echo $batchname encountered an error
    fi
done

Более короткое использование версии grep -A (-A расширение GNU, которое выбирает согласующий отрезок длинной линии и число - 1 по умолчанию - строк, которые следуют):

#!/bin/ksh

fname=$1

for batchname in $(grep -i "Processing batch" $fname | cut -d "'" -f2); do
    Batch_state=`grep -c -i "Batch '$batchname' was successful" $fname`
    printf "%s" $batchname
    if [[ "$Batch_state"  -ge 1 ]]; then
        grep -A1 "Processing batch '$batchname'" $fname | cut -f2 -d" " | fmt
    else
        printf "encountered an error\n"
    fi
done

Но они все еще обрабатывают времена файла 3. См. ответ ChuckCottrill для того, как он мог быть сделан.


1 кажется, что пакеты не обрабатываются параллельно, и что Вы хотите, на самом деле строка, содержащая Processing batch и строка после этого.

3
18.04.2014, 13:39
1 ответ

Есть ли в вашей системе устройство / dev / sda ? К какому типу относится переменная driveid? Покажите нам весь код или попробуйте изменить driveid на:

struct hd_driveid driveid;

Затем вы можете распечатать его содержимое, например:

printf("Firmware Revision=%.8s\n",driveid.fw_rev);
printf("Cylinders=%d\n",driveid.cyls);

Также проверьте: http://lxr.free-electrons.com/source/include/linux/hdreg.h?v=2.6 .32

0
27.01.2020, 21:44

Теги

Похожие вопросы