awk 목록에서 날짜보다 오래된 배포를 제거하는 방법 [닫기]

awk 목록에서 날짜보다 오래된 배포를 제거하는 방법 [닫기]

14일이 지난 클러스터에서 배포를 삭제해야 합니다. 내가 실행하면 :

oc get deploy --sort-by=.metadata.creationTimestamp | grep wml-os-rt-hybrid | awk '{ print $1 "\t\t" $6;}'

이러한 배포 목록과 해당 기간이 제공됩니다.

wml-os-rt-hybrid0.1-gz3vczfc        15d
wml-os-rt-hybrid0.1-fj167pbt        8d
wml-os-rt-hybrid0.1-bdzkqi7z        7d
wml-os-rt-hybrid0.1-g4hclw4v        7d
wml-os-rt-hybrid0.1-j6x9tzt6        7d
wml-os-rt-hybrid0.1-qplkkilw        4d
wml-os-rt-hybrid0.1-sadgz9cz        6h

나는 이것에 완전히 익숙하지 않으며 14d보다 오래된 항목도 삭제하기 위해 무엇을 추가해야 하는지 알 수 없습니다. 이 경우에는 단지 하나의 행이지만 다른 클러스터에서는 수백 개의 행이 됩니다.

답변1

이 시도:

oc get deploy --sort-by=.metadata.creationTimestamp |
awk '/wml-os-rt-hybrid/ && !(($6 ~ /d$/) && (($6+0) > 14)){print $1 "\t\t" $6}'

먼저 인쇄되는 것이 "배포"이고 oc delete deployment <deployment>아래 설명에 언급된 대로 사용할 수 있는 "배포"를 삭제하고 싶고 삭제하려는 것은 위 기준을 충족하지 않는 "배포"라고 가정하면 다음과 같습니다. 다음을 수행해야 합니다.

oc get deploy --sort-by=.metadata.creationTimestamp |
awk '!( /wml-os-rt-hybrid/ && !(($6 ~ /d$/) && (($6+0) > 14)) ){print $1}' |
xargs -n 1 oc delete deployment

원한다면 이 경우 이중 부정을 제거하기 위해 부울 대수학을 사용할 수 있습니다.

답변2

delfile=delete_file_names
... | awk -v delfile="$delfile" 'BEGIN { printf "","" >delfile }; '\
'{ value=$6; sub(".$","",value); '\
'if($6 ~ "h$") value=int(value/24); else value=int(value); }; '\
'value<15 { print $1 "\t\t" $6;}; '\
'value>14 { print $1 >delfile; }'

wml-os-rt-hybrid0.1-fj167pbt            8d
wml-os-rt-hybrid0.1-bdzkqi7z            7d
wml-os-rt-hybrid0.1-g4hclw4v            7d
wml-os-rt-hybrid0.1-j6x9tzt6            7d
wml-os-rt-hybrid0.1-qplkkilw            4d
wml-os-rt-hybrid0.1-sadgz9cz            6h

if [ -s "$delfile" ]; then
    IFS=$'\n' rm -- $(< "$delfile")
fi

관련 정보