![awk 목록에서 날짜보다 오래된 배포를 제거하는 방법 [닫기]](https://linux55.com/image/176916/awk%20%EB%AA%A9%EB%A1%9D%EC%97%90%EC%84%9C%20%EB%82%A0%EC%A7%9C%EB%B3%B4%EB%8B%A4%20%EC%98%A4%EB%9E%98%EB%90%9C%20%EB%B0%B0%ED%8F%AC%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
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