AWK - 핵심 문구 뒤의 숫자 빼기

AWK - 핵심 문구 뒤의 숫자 빼기

내가 찾고 있는 것과 같이 패턴 문자열이 반복되는 파일이 있는데 ABC:10파일에서 매번 ABC:10이를 변환해야 합니다.XYZ:5

트릭 부분은 숫자 부분입니다. 예를 들어 10은 시간 기반이므로 파일을 다운로드할 때마다 변경되므로 X숫자를 생각할 수 있습니다. ABC:X-> XYZ:(X-5).

파일의 번호는 항상 동일하지만 파일을 다시 다운로드하면 일정에 따라 변경됩니다. 신분증을 분실하지 않는 것도 중요합니다.

아래 파일 예의 경우 기본적으로 레벨 3이 남을 때마다 58.1일 남은 레벨 3 -> 데이터 및 58.1 -> 28.1(X-30)을 수정해야 합니다. 레벨 3 남은 횟수는 파일을 다운로드할 때마다 항상 동일하지만, 그 숫자는 기본적으로 남은 일수이므로, 하루가 지나면 1씩 감소합니다.

파일 예:

port: 6666
socks-port: 6699
redir-port: 6669
allow-lan: true
mode: Rule
log-level: info
external-controller: 0.0.0.0:9090

dns:
  enable: true
  ipv6: false
  # listen: 0.0.0.0:53
  # enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 114.114.114.114
  #  - 'tls://dns.rubyfish.cn:853'
  #fallback:
  #  - 'tcp://208.67.222.222:443'
  #  - 'tls://1.0.0.1:853'
  #  - 8.8.8.8
proxies:
  - type: ss
    server: test.com
    port: 49679
    password: test.com
    cipher: aes-128-gcm
    name: ♥流量:300.93GB 等级3剩:57.8天

proxy-groups:

  - name: 

답변1

노력하다

awk -v days=30 '/等级3剩/ { for(i=1;i<=NF;i++)  
     if ( $i ~ /等级3剩:/ ) { split($i,A,":") ; $i = "DATA:" A[2]-days "天" ;}}
     {print;}' 

어디

  • /等级3剩/"레벨 3 왼쪽" 행을 선택하세요.
  • for(i=1;i<=NF;i++) if ( $i ~ /等级3剩:/ )루프 매개변수 검색 모드
  • split($i,A,":")A[1] 및 A[2]의 ":" 분할 패턴(이 예에서는)
  • $i = "DATA:" A[2]-days "天" ;조정값
  • { print }모든 내용을 인쇄합니다(라인 수정 여부에 관계 없음).

참고하세요

  • 명확성을 위해 프로그램을 여러 줄에 넣었는데, 한 줄에 해도 됩니다.

  • 필요한 경우 외부 변수를 사용할 수 있도록 이것을 사용합니다 -v days=30(예 -v days=$DAYS:)

  • 댓글에서 언급했듯이 인식이 상실된 것 같습니다.

      - name: 

관련 정보