Awk
按生日從今天開始的順序列出生日
我有一個包含生日的文本文件:
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/%-d
將4/7
通過某些date
實現輸出,但不可移植,並且04/07
同樣有效),然後awk
將之前的行移到末尾。sort ... - birthdays.txt
對其標準輸入(由 表示
-
,這裡是由 饋送的管道date
)和birthdays.txt
.我們將鍵分隔符設置為
/
with-t/
,-k1
指定從行首到行尾的排序鍵(本質上是-k1
指定整行作為排序鍵),以及-k2
從第一個字元之後的第一個字元開始到第一個字元的排序/
鍵行的末尾,但使用-n
,這些被解釋為數字,因此只有初始數字序列很重要。(以上內容適用於任何類似 Bourne 的 shell(包括
bash
),無需為此安裝bash
)。