сравнить доступный список с выбранными идентификаторами в сценарии оболочки

sudo dmidecode --type 17

возвращает информацию о физической оперативной памяти.

-1
22.07.2020, 10:33
2 ответа

Попробуйте этот скрипт sed:

/^Avail/{
    s/[^=]*=([^ ]*).*/\1/;H
}
/^Chosen/{
    s/.*=//;G;h;x;y/\n/,/
    s/,/ is ab in /;s/$/,/
    /(.*) is.*,\1,/s/ab/pre/
    s/(ab|pre) in,(.*),/\1sent in \2/
    p;s/.*//;x
}

Пользовательский формат вывода:(не был указан OP)

sesh@pc:~/unix$ sed -nrf script.sed input.txt
1655 is absent in 1654
1301 is present in 1300,1301,1303

Счет в sed очень труден. Например, вы можете передать grep -c absentдля подсчета всех событий, когда пользователь выбрал идентификатор, отсутствующий в доступных идентификаторах.

0
18.03.2021, 23:18

Это может быть то, что вы ищете, без ожидаемого результата это предположение, но, надеюсь, вы сможете сделать массаж в соответствии с вашими потребностями:

$ cat tst.awk
BEGIN { FS="[:= ]" }
$1 == "Chosen" {
    if ( $5 in avail ) {
        availCnt++
        str = ""
    }
    else {
        notAvailCnt++
        str = " not"
    }
    userCnt++
    printf "User %s chose %s which was%s available\n", $4, $5, str
    delete avail
    next
}
NF { avail[$5] }
END {
    printf "%d users chose available %d times and not available %d times\n", userCnt, availCnt, notAvailCnt
}

.

$ awk -f tst.awk file
User 75 chose 1655 which was not available
User 10 chose 1301 which was available
2 users chose available 1 times and not available 1 times

Описанное выше будет работать при использовании любого awk в любой оболочке на каждом компьютере UNIX.

2
18.03.2021, 23:18

Теги

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