Talvez algo como:
date +'%m/%d 0000' |
sort -nt/ -k1 -k2 - birthdays.txt |
awk '$2 == "0000" {past_today = 1; next}
past_today {print; next}
{next_year = next_year $0 RS}
END {printf "%s", next_year}'
Ou seja, insira uma linha 04/07 0000
( date +%-m/%-d
produziria 4/7
com algumas implementações date
, mas não é portátil e 04/07
funciona tão bem) antes de classificar por data e, em seguida, ter awk
move as linhas que estão antes daquela para o final.
sort ... - birthdays.txt
classifica seu stdin (representado por -
, aqui um pipe alimentado por date
) e o conteúdo de birthdays.txt
.
Definimos o separador de chaves como /
com -t/
, -k1
especifica uma chave de classificação do início ao fim da linha (em essência, -k1
especifica a linha completa como uma chave de classificação), e -k2
uma chave de classificação que começa no primeiro caractere após o primeiro /
até o final da linha, mas com -n
, esses são interpretados como números, portanto, apenas a sequência inicial de dígitos é importante.
(o acima funcionaria com qualquer shell parecido com o Bourne (incluindo bash
), não é necessário instalar bash
apenas para isso).