不止一個條件我都包含以下格式行的文件:在AWK
<firstname> <lastname> <day_of_birth> <month_of_birth> <year_of_birth>
我需要顯示誰在當前日期過生日的用戶。
我設法寫腳本,但只能通過檢查當天==當天。
我該怎麼寫awk行,檢查$ 3 ==日,還要檢查$ 4 ==月和$ 5 ==年?謝謝
# get current date: day, month, year
day="$(date +'%d')"
month="$(date +'%m')"
year="$(date +'%Y')"
birthdays=$(awk "\$3~/$day/ {print \$1, \$2;}" users.lst)
echo $birthdays
如果您使用函數getline考慮,確保你準備好並且完全理解在http://awk.info/?tip/getline上描述的所有注意事項。就我個人而言,我不會爲此使用getline,而是使用YMMV。 –
@EdMorton感謝您的評論。在http://awk.info/?tip/getline上,它說'getline是從管道讀取的合適解決方案。但是,我想知道,你在這裏看到什麼問題嗎?例如,如果管道在訪問變量「日」,「月」和「年」之前關閉。或者我們可以依靠他們有一個明確的價值,即使管道沒有關閉? –
getline是一種適合讀取管道的解決方案,但在這種情況下,沒有理由從管道讀取數據,例如,當您使用awk從文件中讀取數據時,發現調用某個shell命令來操作時很有用然後使用getline讀取結果,然後在awk中繼續處理。是的,只要你完成了每一個管道就應該關閉管道(比如'cmd =「date +%d」; cmd | getline day; close(cmd)'),我不確定後果是什麼在這種情況下不這樣做 - 我只是這樣做,所以我不需要閱讀爲什麼。 –