열지 않고 마지막 문자로 awk 및 printf

0

질문

나는 이 스크립트:

#!/bin/bash

f_status () {
        systemctl list-units | grep $1 | awk '{ printf("SERVICE STATUS:  %-25s \t %s \t %s \t %s\n",$1,$2,$3,$4) }'
}

f_line() {
        echo "-------------------------------------------------------------------------------------------"
}

echo ""
f_line
f_status "cron"
f_status "ssh"
f_line

이 스크립트에게 이러한 결과:

-------------------------------------------------------------------------------------------
SERVICE STATUS:  cron.service                    loaded          active          running
SERVICE STATUS:  ssh.service                     loaded          active          running
-------------------------------------------------------------------------------------------

나는 검색을 제거하는 방법".서비스"에서 3d 열입니다.

내가 함께 노력 substr($i,0,-8)${1:-8}

사람이 어떤 생각을 가지고 제거하는 방법 8 자의 끝에서 보이게하기 위해 다음과 같다:

-----------------------------------------------------------------------------------
SERVICE STATUS:  cron                    loaded          active          running
SERVICE STATUS:  ssh                     loaded          active          running
-----------------------------------------------------------------------------------
awk bash printf
2021-11-23 11:39:15
3

최고의 응답

0

당신이 필요하지 않 grep 할 때 사용하여 awk 이후 grep 'foo' file | awk '{print 7}' 로 작성할 수 있습만 awk '/foo/{print 7}' file.

오히려 문자,다만 제거하는 모든 것의 시작에서 마지막 .:

systemctl list-units |
awk -v tgt="$1" '
    {
        svc = $1
        sub(/\.[^.]*$/,"",svc)
    }
    svc == tgt {
        printf "SERVICE STATUS:  %-25s \t %s \t %s \t %s\n",svc,$2,$3,$4
    }
'

또한 강화의 비교를 방지하 거짓과 일치하는 경우에 호출 서비스는 이름의 하위 집합의 몇 가지 다른 서비스 이름 또는 담 regexp metachars 아 ..

2021-11-23 12:10:21

감사에 대한 빠른 메가 대답합니다. 또한 감사에 대한 조언에"grep"및"awk"나는 그것을 명심하십시오. I spent4 시간 동안 이 작업에이고 나는 아무 생각이 없었고 그것을 해결하는 방법.
gacek

내가 선택한 솔루션에 따라 귀하의 게시물에 대한 권장 사항 응답 행동입니다. 당신을 감사하시고 감사합니다!
gacek
0

필요하신 컴퓨팅 끝에 위치 기반에서 문자열의 길이를 고려해 다음과 같은 단순한를 들어,하자 file.txt 콘텐츠

cron.service
ssh.service

다음

awk '{print substr($1,1,length($1)-8)}' file.txt

출력

cron
ssh

설명:에 대해 인수 substr 는 문자열로 시작,위치,위치, length 수를 반환에서 문자의 문자열입니다.

(테스트에 둔한 4.2.1)

2021-11-23 12:04:06

감사에 대한 설명이 있습니다. 이 방법:전 substr($1,길이,-8)지만,나는 생각하지 않았다는 변수를 지정해야 하는 문자 수 계산.
gacek

@gacek length 없이 사용하는 경우 () 다만 변수를 잡고 번호에서 문자의 전체 라인($0)보다는 오히려 특정 분야는 경우,예를 들어,당신은 파일이 하나의 라인: 123 456 다음 {print length}7으로,그것은 6 자리 숫자와 공간입니다.
Daweo

length when used without () is just variable -아니,그것은 여전히 함수 호출,그것은 단지 대한 약어 length($0). 었다면 변수 그런 다음,다른 것들 사이에,당신의 값을 할당하지만 당신은 할 수 없습니다.
Ed Morton
0

당신이 사용할 수 있는 gsub funtion 에서 awk,다음과 같:

 systemctl list-units | grep 'cron' | awk '{gsub(".service","",$1); printf("SERVICE STATUS:  %-25s \t %s \t %s \t %s\n",$1, $2 ,$3,$4) }'
SERVICE STATUS:  crond                       loaded      active      running
2021-11-23 12:04:26

1) gsub() 은 만들기 위한 여러 대체하는 동안 당신은 단지 하고 싶 1 되어야 합니다 그래서 사용 sub() 대신,2)첫 번째 인수를 위해 모든 *sub() 기능 regexp 는 문자열이 아닌,그래서 당신이 사용해야 regexp /.../지 문자열 "...",기호,3)해야 합 앵커의 정규 표현식으로 종료 $ 그래서 제거할 마지막 발생 라인에서 첫 번째,4)당신은 탈출하는 데 필요합 . 에 regexp 거나 그 정보를 열람하실 수 있습니다 모든 문자뿐만 아 . 당신이 원하는 일 5)당신은 필요 없어요 grep when youre 사용 awkgrep 'cron' | awk '{foo}' = awk '/cron/{foo}'.
Ed Morton

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................