Calculate datediff


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Calculate datediff
# 1  
Old 10-05-2017
Calculate datediff

I'm trying to calculate datediff between string from filename and current date,
i got problem with storing variable from date command

Code:
now=$(date  +"%s")
echo "NOW = ${now}";
file=$(ls -1Ap *.txt|grep -v /\$ |tail -1)
echo "file name is $file"
#filename 201710030549.txt

y=$(echo $file|cut -c 1-4)
m=$(echo $file|cut -c 5-6)
d=$(echo $file|cut -c 7-8)

in="$m/${d}/${y}"

$fdate=`$(date -d "$in" +"%s")`
echo "file date = $fdate"
echo $(( (now - fdate) / 86400 )) days

error result
Code:
NOW = 1507184947
file name is 201710050619.txt
./test.sh: line 14: 1507136400: command not found
./test.sh: line 14: =: command not found
file date = 
17444 days

# 2  
Old 10-05-2017
This is double command substitution (both ` ... ` and $( ... ) plus the first dollar sign should not be there:

Quote:
Originally Posted by before4
Code:
[..]
$fdate=`$(date -d "$in" +"%s")`
[..]

Try:
Code:
fdate=$(date -d "$in" +"%s")


Last edited by Scrutinizer; 10-05-2017 at 04:03 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 10-05-2017
From your usage of date I would guess that you are (1) using Gnu utilities and therefore (2) are on a Linux distro and therefore (3) using bash.

Try this:
Code:
now=$(date  +"%s")
echo "NOW = ${now}";
file=$(ls -1r *.txt|head -1)
echo "file name is $file"
#filename 201710030549.txt

fdate=$(date -d ${filename:0:8} +"%s")
echo "file date = $fdate"
echo $(( (now - fdate) / 86400 )) days

Adding -r to ls allows us to use head instead of tail. Also, it is unlikely that
there will be a directory with the .txt extension the the -p and the grep should not be needed. The -A is also useless in this context.

The variable expansion ${var:offset:len} will produce len characters from the offset position (starting from zero), so ${filename:0:8} will produce 20171003.

date will understand 20171003 as 3rd October 2017 so you don't need to chop up the date.

Hope this helps.

Andrew
This User Gave Thanks to apmcd47 For This Post:
# 4  
Old 10-05-2017
Quote:
Originally Posted by apmcd47
From your usage of date I would guess that you are (1) using Gnu utilities and therefore (2) are on a Linux distro and therefore (3) using bash.

Try this:
Code:
now=$(date  +"%s")
echo "NOW = ${now}";
file=$(ls -1r *.txt|head -1)
echo "file name is $file"
#filename 201710030549.txt

fdate=$(date -d ${filename:0:8} +"%s")
echo "file date = $fdate"
echo $(( (now - fdate) / 86400 )) days

Adding -r to ls allows us to use head instead of tail. Also, it is unlikely that
there will be a directory with the .txt extension the the -p and the grep should not be needed. The -A is also useless in this context.

The variable expansion ${var:offset:len} will produce len characters from the offset position (starting from zero), so ${filename:0:8} will produce 20171003.

date will understand 20171003 as 3rd October 2017 so you don't need to chop up the date.

Hope this helps.

Andrew
Thanks, that much cleaner.
Code:
ow=$(date  +"%s")
echo "NOW = ${now}";
file=$(ls -1r *.txt|head -1)
echo "file name is $file"
#filename 201710030549.txt
echo ${file:0:8}
fdate=$(date -d ${file:0:8} +"%s")
echo "file date = $fdate"
echo $(( (now - fdate) / 86400 )) days
~

Code:
./test2.sh 
NOW = 1507195265
file name is 201710042019.txt
20171004
file date = 1507050000
1 days

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to calculate difference:?

Experts, file1 : Want to find the difference of $3 field from next line's 3rd field, The difference to be calculated from next lines 3rd field, to current lines lines 3rd field. file1 : Jun24_2013.06242013 3301244928 3133059904 167370640 95% Jun25_1124.06252013 3301244928... (4 Replies)
Discussion started by: rveri
4 Replies

2. Shell Programming and Scripting

Calculate the mean of numbers

I have a text file which has 3 columns. The first two columns are shown below. 57 7 23 8 14 17 23 1 I need to print mean using the following formula . mean =sum of the numbers of $2/total numbers of $1 output:- sum of $2 = 33 total numbers = 4 mean= 8.25 (1 Reply)
Discussion started by: andreaalex
1 Replies

3. UNIX for Dummies Questions & Answers

Calculate

i have file input abcedef|wert|13|03|10|04|23|A1|13|05|01|09|31 fsdasdf|ferg|12|04|25|21|21|A1|13|02|26|20|31 dfsfsad|gerg|12|04|25|21|21|A1|13|02|25|25|31 i expect the output abcedef|wert|13|03|10|04|23|A1|13|05|01|09|31|9.516666667... (5 Replies)
Discussion started by: radius
5 Replies

4. Shell Programming and Scripting

Calculate age of a file | calculate time difference

Hello, I'm trying to create a shell script (#!/bin/sh) which should tell me the age of a file in minutes... I have a process, which delivers me all 15 minutes a new file and I want to have a monitoring script, which sends me an email, if the present file is older than 20 minutes. To do... (10 Replies)
Discussion started by: worm
10 Replies

5. Shell Programming and Scripting

Calculate P Value -Awk

Is there any awk command to calculate P Value ?(Probability) Is it possib;e to calculate P va;ue for this data for ex? 7.891284 8.148193 7.749575 7.958188 7.887702 7.714877 8.141548 7.51845 8.27736 7.929853 7.92456 8.249126 7.989113 8.012573 8.351206 (2 Replies)
Discussion started by: stateperl
2 Replies

6. Shell Programming and Scripting

How To Calculate

I have 2 variables in my shell scripts in which i am using awk and calculating 2 files and getting 2 different variable called in_total and out_total. I want to subtract one variable from another so plz tell me how i can do that. Example is: cat in_file | awk -F: '{ in_total += $1 * 86400... (3 Replies)
Discussion started by: krishna_sicsr
3 Replies

7. Programming

calculate average

I have a file which is 2 3 4 5 6 6 so i am writing program in C to calculate mean.. #include<stdio.h> #include<string.h> #include <math.h> double CALL mean(int n , double x) main (int argc, char **argv) { char Buf,SEQ; int i; double result = 0; FILE *fp; (3 Replies)
Discussion started by: cdfd123
3 Replies

8. Shell Programming and Scripting

calculate the space

Hi everyone, I need to write a script to calculate the space for sub-folders under /home: Here is the scanrio: cd /home drwxr-xr-x 57 root root 8192 Jan 22 16:13 home_1 drwxrwxrwx 69 root root 8192 Jan 29 10:36 home_2 drwxr-xr-x 97 root root 8192 Nov... (8 Replies)
Discussion started by: za_7565
8 Replies

9. AIX

calculate time

Hi, How do I calculate time? I need to create an alert if a process is running more than 30 minutes. I need to get the first time and then get another, calculate it if more than 30 mins and then alert it to pager. Can't find it in internet. Thanks in advance, itik (2 Replies)
Discussion started by: itik
2 Replies

10. Shell Programming and Scripting

calculate from three files

Hi all I have 3 three files like: file1: 1|100 2|200 3|300 4|400 5|500 file2: 1|200 2|200 3|600 4|800 file3: 1|300 2|100 (5 Replies)
Discussion started by: koti_rama
5 Replies
Login or Register to Ask a Question