helm history
(Kubernetes 도구) 명령을 사용하여 내 빌드의 마지막 개정 번호를 가져오는 bash 스크립트를 작성 중입니다 . 이 명령의 출력은 다음과 같습니다.
helm history release
REVISION UPDATED STATUS CHART DESCRIPTION
1 Mon Feb 27 12:46:10 2017 SUPERSEDED chart-solution-0.1.0-beta1 Install complete
2 Fri Mar 3 11:40:55 2017 SUPERSEDED chart-solution-0.1.0-beta1 Upgrade complete
3 Fri Mar 3 11:41:02 2017 DEPLOYED chart-solution-0.1.0-beta1 Upgrade complete
예상되는 결과는 3
열의 숫자(마지막 값) 만 반환하는 것입니다 REVISION
. 이제 다음을 사용하여 이 작업을 수행할 수 있습니다.
helm history release | awk -v col=REVISION 'NR==1{for(i=1;i<=NF;i++){if($i==col){c=i;break}} print $c} NR>1{print $c}' | tail -n 1
3
그러나 "열"은 UPDATED
불규칙하며(공백으로 구분된 항목) 위 명령은 REVISION
열이 나타날 때까지만 작동합니다 UPDATED
. 향후 버전에서 이 helm history
명령이 열 순서를 변경하면 상황이 복잡해질 수 있습니다.
간단한 예는 STATUS
다음 열을 사용하여 마지막 값을 얻으 려고 하는 경우입니다 UPDATED
.
helm history release | awk -v col=STATUS 'NR==1{for(i=1;i<=NF;i++){if($i==col){c=i;break}} print $c} NR>1{print $c}' | tail -n 1
Mar
REVISION
열 순서가 바뀌어도 올바른 마지막 값을 얻을 수 있는 방법이 있나요?
답변1
검색할 열 이름은 -col=
표시된 대로 명령줄에 제공됩니다.
코드는 해당 열 이름을 줄의 시작 부분이나 공백부터 검색하고 다음 열의 시작 부분이나 줄의 끝 부분까지의 범위를 기록합니다.
이 정보를 사용하여 eof까지 기다렸다가 마지막 줄에서 하위 문자열을 추출합니다.
helm history release | perl -slne '$. == 1 and /(?:(?<=^)|(?<=\s))\Q$col\E(?:\s*|$)/ and ($p,$l)=($-[0],$+[0]-$-[0]); eof and print substr($_, $p, $l) =~ s/\s*$//r;' -- -col='REVISION'
'
답변2
col='REVISION' \
perl -lne '
$. == 1 and /(?:^|\s)(?=$ENV{col}(?:\s|$))/g and $h=pos, next;
/^.{$h}/g; /\G(\S+)/ and print $1;
next;
' yourfile
col='REVISION' \
perl -lne '
$. == 1 and $h = index($_, $ENV{col}), next;
/^.{$h}/g; /\G(\S+)/ and print $1;
' yourfile
REVISION
첫 번째 줄에서는 index()
현재 줄의 연산을 사용하여 위치를 계산합니다 $_
. 나머지 모든 줄에 대해서는 /^.../g를 일치시켜 이 위치를 건너뜁니다. 그런 다음 앵커 포인트를 사용하여 \G
중단한 부분부터 일치를 시작하고 외부에서 공백이 아닌 문자를 가져옵니다 \S+
.