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行だけですが、他のクラスタでは数百行になります。

答え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

関連情報