нужен гепатит с awk, если он равен или меньше - PullRequest
1 голос
/ 27 апреля 2020

Как и в предыдущем посте, который я сделал, я пытаюсь сделать следующее:

Myfile.txt содержит:

$TTL 600
@            IN    SOA  dns1.mysite.com. root.localhost.  (
                      2020042101   ; serial
                      1h           ; refresh
                      30m          ; retry
                      1w           ; expiry
                      30m)         ; minimum
               IN     NS    localhost.

dns1.mysite.com    IN      A       172.16.1.18
dns2.mysite.com    IN      A       172.16.2.18

; Redirect this site to localhost to block
; List last consolidated on 12/11/2018

; DNS Blocks
*.mad   IN      CNAME   *.

beans.com       A       127.0.0.1 ; this is a test case

*.000webhostapp.com     A       127.0.0.1
*.00h5.com      A       127.0.0.1
*.00webhostapp.com      A       127.0.0.1

myscript. sh содержит:

date=$ (date '+%y%m%d'01)
ydate=$ (date -d yesterday '+%y%m%d'01)

awk "{sub(/$ydate/,$date)}1" myfile.txt > tempt.txt && mv temp.txt myfile.txt

В нынешнем виде это работает, ЕСЛИ дата в файле соответствует только вчерашней дате. Теперь я собираюсь сопоставить, если это дата вчерашнего дня или раньше, и если это так, заменить ее на $ date, а затем перезаписать файл.

Я знаю, что awk может сделать это с "n1 -le n2", но я не могу заставить его работать в соответствии с операциями, которые я использую.

Может кто-нибудь помочь мне заставить это работать?

Спасибо!

1 Ответ

1 голос
/ 27 апреля 2020

Используйте сравнение <=. Затем вы можете переназначить поле с заменой.

awk -v yesterday="$date" -v today="$ydate" '/; serial/ && $1 <= yesterday { sub(/[0-9]+/, today) }1' myfile.txt > temp.txt

И, как правило, лучше назначить awk переменные с -v, чем заменять переменные оболочки в сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...