什么作業:
echo "Oct 12 2021" | awk '{print "date -d\""$1FS$2FS$3"\" %Y%m%d"}' | bash
如何在 bash 腳本中使用變數?
mydate="Oct 12 2021"
awk -v dateformat= ''$mydate" '{print "date -d\""$1FS$2FS$3"\" %Y%m%d"}'
uj5u.com熱心網友回復:
您顯然不會真正使用awk呼叫date單個值,但我假設您在實際代碼中考慮的不僅僅是這些,所以這就是您所要求的(date使用 awk 變數作為日期從 awk 呼叫 GNU):
mydate="Oct 12 2021"
awk -v date="$mydate" 'BEGIN {
system("date -d\047" date "\047 \047%Y%m%d\047")
}'
20211012
或者,如果您愿意:
awk -v date="$mydate" 'BEGIN {
cmd = "date -d\047" date "\047 \047%Y%m%d\047"
print ( (cmd | getline line) > 0 ? line : date"=N/A" )
close(cmd)
}'
20211012
但是不要做任何一個。從 awk 呼叫外部命令非常慢,當您只想將文本從一種格式更改為另一種格式時,您不需要這樣做:
$ awk -v date="$mydate" 'BEGIN {
split(date,d);
mth = (index("JanFebMarAprMayJunJulAugSepOctNovDec",d[1]) 2)/3
printf "ddd\n", d[3], mth, d[2]
}'
20211012
此外,如果你有 GNU awk,它有內置的時間函式,所以即使你想做的不僅僅是在你周圍打亂一些文本,你也可以呼叫 internalmktime()而strftime()不是 external date:
awk -v date="$mydate" 'BEGIN {
split(date,d)
mth = (index("JanFebMarAprMayJunJulAugSepOctNovDec",d[1]) 2)/3
secs = mktime(d[3]" "mth" "d[2]" 12 0 0")
print strftime("%Y%m%d",secs)
}'
20211012
uj5u.com熱心網友回復:
您的原始示例使用 awk 準備引數,然后將這些引數傳遞給在 bash 中運行的 Linux date 命令;日期格式由 date 命令執行。
你不需要 awk ,日期命令 -d 選項在它接收的格式上非常靈活。
mydate="Oct 3 2021"
date -d "$mydate" %Y%m%d
會給你一個格式化的日期。您可以使用 $() 語法將結果分配給變數 - 運行命令并分配結果
formattedDate=$(date -d "$mydate" %Y%m%d)
echo $formattedDate
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/437121.html
上一篇:將字串排序為一組大寫和小寫字母-Javascript
下一篇:ExcelBYROW排序結果
