บน Linux CLI มีวิธีรับจำนวนสัปดาห์ของเดือนหรือไม่ อาจมีวิธีอื่นในการรับสิ่งนี้ด้วยdate
คำสั่งง่ายๆ (เหมือน)? สมมติว่าวันที่ 1 ถึง 7 เป็นสัปดาห์แรกวันที่ 8 ถึง 14 คือสัปดาห์ที่สองเป็นต้น
บน Linux CLI มีวิธีรับจำนวนสัปดาห์ของเดือนหรือไม่ อาจมีวิธีอื่นในการรับสิ่งนี้ด้วยdate
คำสั่งง่ายๆ (เหมือน)? สมมติว่าวันที่ 1 ถึง 7 เป็นสัปดาห์แรกวันที่ 8 ถึง 14 คือสัปดาห์ที่สองเป็นต้น
คำตอบ:
date
คำสั่งไม่สามารถทำเช่นนี้ภายในดังนั้นคุณจึงจำเป็นบางเลขคณิตภายนอก
echo $((($(date +%-d)-1)/7+1))
แก้ไข: เพิ่มเครื่องหมายลบระหว่าง% และ d
คุณสามารถใช้สิ่งนี้:
วันจันทร์วันอาทิตย์แรก
WEEKNUMBER=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))
วันอาทิตย์และวันในสัปดาห์
WEEKNUMBER=$(( 1 + $(date +%U) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%U) ))
ลองสิ่งนี้:
d=`date +%d` ; m=`date +%m` ; y=`date +%Y` ; cal $m $y | sed -n "3,$ p" | sed -n "/$d/{=;q;}"
ลดความซับซ้อนโซลูชันของ Victor Sanchez:
expr 1 + $(date +%V) - $(date +%V -d $(date +%Y-%m-01))
แทนที่% V ด้วย% U หากคุณต้องการให้สัปดาห์เริ่มต้นในวันอาทิตย์
btw: ต้องใช้ expr แทน $ ((... )) เพราะในภายหลังดูเหมือนจะไม่ชอบตัวเลขที่มีเลขศูนย์นำหน้า
ถ้าคุณยอมรับเครื่องมือภายนอกในการแสวงหาของคุณลองdateutils มันเป็นความคิดของวันที่เกิดขึ้น - ภายในเดือนเช่น 27 เมษายน 2012 คือวันศุกร์ที่ 4 ในเดือนเมษายน 2012 ซึ่งเพิ่งตรงกับคำนิยามสัปดาห์ของคุณ ในการรับหมายเลขนั้นให้ใช้:
dconv 2012-04-27 -f %c
=>
04
%c
(นับ) เป็นตัวระบุรูปแบบสำหรับการเกิดขึ้นภายในเดือน หรือจะลองให้เย็นกว่านี้
dconv today -f '%cth %a in %b %Y'
=>
1st Wed in Sep 2012