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日が過ぎると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 }すべての内容を印刷します(ラインを変更するかどうかにかかわらず)。

参考にしてください

  • わかりやすくするために、プログラムを複数行に入れましたが、1行にしても構いません。

  • 必要に応じて外部変数を使用できるようにこれを使用します-v days=30(例-v days=$DAYS:)

  • コメントで述べたように、認識が失われたようです。

      - name: 

関連情報