Extract from cal


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extract from cal
# 8  
Old 08-11-2014
Quote:
Originally Posted by protocomm
Excuse me, i don't understand completely the post.
Look at the output from cal 6 2014:
Code:
     June 2014
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

The code you suggested:
Code:
cal 6 2014 | awk 'NR==4{print $1}'

will print 8, but the 1st Sunday in June, 2014 is the 1st; not the 8th.

The code I suggested will print 1 in this case and should print the correct day number for the 1st Sunday no matter what day of the week the 1st day of the month is.
# 9  
Old 08-11-2014
Quote:
Originally Posted by Don Cragun
Look at the output from cal 6 2014:
Code:
     June 2014
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

The code you suggested:
Code:
cal 6 2014 | awk 'NR==4{print $1}'

will print 8, but the 1st Sunday in June, 2014 is the 1st; not the 8th.

The code I suggested will print 1 in this case and should print the correct day number for the 1st Sunday no matter what day of the week the 1st day of the month is.
Yes it's true, my answer to the post was so quickly, thx.
# 10  
Old 08-12-2014
Are we looking at this the wrong way? The output from cal will have a header row, then the next line will always have Saturday in it. You can see what the Saturday is by trimming off things you don't need, then work out Sunday from that.

Consider:-
Code:
topline=`cal $mm $yyyy | head -3 | tail -1`
Sat1="${topline##* }"
((Sun1=$Sat1+1))
if [ $Sun1 -eq 8 ]
then
   Sun1=1
fi

So, first Saturday of a month is the value of Sat1 and the first Sunday of a month is the value of Sun1

Okay, it's a few lines of code, but it works.


I hope that this helps,
Robin

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

As does:-
Code:
cal $1 $2|awk 'NF == 7 && NR > 2 {print $1; exit}'

....posted by Don earlier that I hadn't fully read. Smilie

Last edited by rbatte1; 08-12-2014 at 12:21 PM.. Reason: Commented on Don's earlier suggestion
# 11  
Old 08-12-2014
I think you're onto something! The fourth line of the calendar is always complete, why not calculate from it?

That's robust/complete enough to work on any day of the week. 1 for Sunday, 7 for Saturday.

Code:
$ cal
     August 2014
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

$ for N in 1 2 3 4 5 6 7
do
        cal | awk 'NR==4 { while(($DAY+0) > 7) $DAY -= 7; print $DAY; exit }' DAY=$N
done

3
4
5
6
7
1
2

$

There's probably a smarter way with modulous, but that's tricky and longwinded when numbers count from 1 instead of 0, so maybe not...
# 12  
Old 08-12-2014
Nobody remembers my datecalc script. Smilie

Well, datecalc provides the primatives needed to handle any date calculation. To find the first Sunday...

Code:
#! /bin/ksh
alias datecalc=./datecalc
year=$1
month=$2
day1=$(datecalc -d $year $month 1)
((first_sunday = (8 - day1) % 8 ))
echo $first_sunday
exit 0

Here is a sample run...
Code:
$
$ ./first-sunday 2014 8
3
$

My datecalc script is posted here: datecalc
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Cal -m on bash

Hi, I want to make Monday as the first day of the month while using cal command when I execute without bash, its working fine /bin/sh cal -m 03 2013 March 2013 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30... (5 Replies)
Discussion started by: infyanurag
5 Replies

2. Homework & Coursework Questions

Using cal in a script

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Write a shell script that will: "Display" the number of days in the current month. For example: September... (1 Reply)
Discussion started by: eaafuddy
1 Replies

3. Shell Programming and Scripting

another cal command question.

I got this from this board yesterday cal | xargs -n1 | tail -1 which displays the current months days.. for instance if you type this in a shell today you will get 31. I would like to also display the month and year.. something like March 2011 has 31 days. how would I do that? ... (3 Replies)
Discussion started by: rontopia
3 Replies

4. UNIX for Dummies Questions & Answers

cal command

Hello, I wanted to display calender for the previou, current and next month in a single command... I used the command cal -3 for this. But its throwing me a Bad Argument error. I am using HP UX to execute this command. Is this a syntax error, or let me know if there any other ways to... (6 Replies)
Discussion started by: atlantis
6 Replies

5. Shell Programming and Scripting

Get day of week from cal

Hi all, I am trying to get dow from cal using below script #! /bin/bash YEAR=`echo $1 | cut -c 1-4` MONTH=`echo $1 | cut -c 5-6` DAY=`echo $1 | cut -c 7-8` for i in 1 2 3 4 5 6 7 do dayofweek=`cal $MONTH $YEAR | awk '$i == $DAY {printf("%s","$i")}'` echo $dayofweek... (4 Replies)
Discussion started by: bzylg
4 Replies

6. Shell Programming and Scripting

parsing cal cmd

:o given a date example mm dd yyyy 01 02 1999 how can your parse cal 01 1999 and find the date in the above case 02 and display what the actual day was eg s m t w t f s Thanks in advance Dragrid (7 Replies)
Discussion started by: dragrid
7 Replies

7. UNIX for Dummies Questions & Answers

Cal question

This probably would be a cake walk for you, but i am having trouble with this. I am trying to print every tuesday of the month from cal, and the FS default is space. There is one row that has few spaces at the beginning and so when i print $3, those spaces get ingnored and a different day gets... (2 Replies)
Discussion started by: Vin
2 Replies

8. AIX

doubt in cal command

I am new to unix... How to get all the saturdays of a specific year? for a specific month, i tried as below.. cal 02 2006 | awk '{print $7}' but it is not giving all saturdays.... can anyone help me with this? Thanks in advance, Sumi (9 Replies)
Discussion started by: sumi
9 Replies

9. UNIX for Dummies Questions & Answers

cal

hey everyone. I'm new to UNIX, and I'm having trouble with the cal command. I know that you can display a calendar if you just type in 'cal 3 2005' for example. But how would you do it if you just wanted the calendars displayed to be from March 2005 to June 2005? Thanks (4 Replies)
Discussion started by: pythonman
4 Replies

10. UNIX for Dummies Questions & Answers

Cal command

I am trying to configure the cal command to recognize the month names. When you type: cal - you get the calander for the current month of the current year. Is there a way of making the system recognize March, and Mar. So I could type: cal March or cal mar and get the same response as cal.... (5 Replies)
Discussion started by: Astudent
5 Replies
Login or Register to Ask a Question