Grep для предыдущего матча - PullRequest
       2

Grep для предыдущего матча

0 голосов
/ 07 октября 2019

Лучше объяснить на примере, чего я хочу достичь.

У меня есть такой вывод kubectl:

app-bf7c5cdfb-x8thq   3/3     Running   0          2h
app-bf7c5cdfb-xc9nf   3/3     Running   0          2h
app-bf7c5cdfb-xwlzh   2/3     Running   0          1h
app-bf7c5cdfb-xxt46   3/3     Running   0          2h
app-bf7c5cdfb-z9s2t   2/3     Running   0          7m
app-bf7c5cdfb-zmpzs   3/3     Running   0          2h
app-bf7c5cdfb-ztfx5   3/3     Running   0          2h

Я хочу grep для каждой строки, где готовые модулине равно общему количеству стручков, что приводит к:

app-bf7c5cdfb-xwlzh   2/3     Running   0          1h
app-bf7c5cdfb-z9s2t   2/3     Running   0          7m

Есть ли простой способ сделать это? Мой подход - написать такую ​​функцию:

function kubeNotReady {
    unset tmp
    while :
    do 
        read line
        [[ $line == "" ]] && tmp="${tmp:0:$((${#tmp}-1))}" && break

        total=`echo "$line" | sed -E "s|.*[[:digit:]]*/([[:digit:]]*).*|\1|"`
        match=`echo "$line" | grep -v "$total/$total"`
        if [ "${#match}" -gt "0" ]; then
            tmp="$tmp$match"$'\n'
        fi
    done
    echo "$tmp"
}
kubectl get po | kubeNotReady

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Если AWK - ваш вариант, попробуйте следующее:

awk '{split($2, a, "/"); if (a[1] != a[2]) print}' out.txt

В качестве альтернативы вы можете сказать с bash как:

while IFS= read -r line; do
    [[ $line =~ [[:blank:]]([[:digit:]]+)/([[:digit:]]+)[[:blank:]] ]] && (( ${BASH_REMATCH[1]} != ${BASH_REMATCH[2]} )) && echo "$line"
done < out.txt

Надеюсь, это поможет.

0 голосов
/ 07 октября 2019

Вот grep, который похож на то, что вы хотите.

echo "4/5" | grep -vE "^(.+)/\1$"

, который обрабатывает только дробь. Чтобы он обрабатывал предоставленный вами пример, просто отфильтруйте все, кроме 2-го слова, прежде чем передать его предоставленному мной grep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...