Awk

按生日從今天開始的順序列出生日

  • April 7, 2017

我有一個包含生日的文本文件:

1/23 Horace
3/1 Taraneh
7/14 Valerian
11/31 Carmen

我想顯示今天的生日。

例如,如果今天是 4/7(4 月 7 日):

7/14 Valerian
11/31 Carmen
1/23 Horace
3/1 Taraneh

如何在 bash 腳本中執行此操作?

我已經找到瞭如何根據模式拆分文本文件*(然後我可以以相反的順序連接拆分)*但這裡的訣竅是今天的日期可能不存在,或者可能是幾個人的生日。

注意:所有日期均為有效日期。

也許是這樣的:

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}'

也就是說,在按日期排序之前插入04/07 0000一行(date +%-m/%-d4/7通過某些date實現輸出,但不可移植,並且04/07同樣有效),然後awk將之前的行移到末尾。

sort ... - birthdays.txt

對其標準輸入(由 表示-,這裡是由 饋送的管道date)和birthdays.txt.

我們將鍵分隔符設置為/with -t/-k1指定從行首到行尾的排序鍵(本質上是-k1指定整行作為排序鍵),以及-k2從第一個字元之後的第一個字元開始到第一個字元的排序/鍵行的末尾,但使用-n,這些被解釋為數字,因此只有初始數字序列很重要。

(以上內容適用於任何類似 Bourne 的 shell(包括bash),無需為此安裝bash)。

引用自:https://unix.stackexchange.com/questions/356502