Sponsored Content
Top Forums Shell Programming and Scripting add up time with xx:yy format in bash how? Post 302599997 by agama on Sunday 19th of February 2012 09:40:54 PM
Old 02-19-2012
Don't confuse the shell variable expansion substitution syntax with regular expressions because they are (just as confusing at first) and quite different.

For the full list of possibilities have a look at one of the shell man pages, for example the kshell page:
man/man1/ksh.html man page

The parameter expansion is about 25% down in the page (search for %% and you'll find it).

Specifically. ${name%%:*} expands the value in the variable 'name' and matches the longest pattern ":*" that is at the end of the string. The part of the expansion that is matched is truncated. So, if name contains ab:cd:ef, the expression above would match ":cd:ef" and delete that leaving just "ab".

The ${name:##*:} does the same kind of truncation, but starting from the beginning of the string. Again, if name contains "ab:cd:ef" then only "ef" would be left as the longest pattern from the beginning to ':' is "ab:cd:".

As for your error, it's treating the leading 0 as an indicator that the value should be an octal number. I don't usually work in bash -- Kshell's evaluation supports floating point calculations and doesn't make this assumption, so I wasn't aware that this would be an issue. You can compensate for this behaivour with this:

Code:
   h=$(( ${h#0} + ${x%%:*} ))  
   m=$(( ${m#0} + ${x##*:} ))

This is similar to the examples I gave above, but it matches the shortest pattern starting at the beginning of the line. So if h == "04" the expansion will just be 4, and bash won't complain. If h == "00" the expansion will be 0 which again will be fine. Finally, if h == "12" there isn't a match so there isn't a truncation.

Good luck!

---------- Post updated at 21:40 ---------- Previous update was at 21:39 ----------

Quote:
Originally Posted by bashily
I fixed it. it is base 8 and I need to force bash to recognize these number as decimal by using 10# in front of the number!
Nice job!!

That happens to be a trick that I didn't know -- I approached it a bit differently, so as usual, I learned something too.
This User Gave Thanks to agama For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Please help formatting bash "time" variable to HH:MM:SS format

Ok, this is going to be hard to describe, but here it goes. I have written a bash script that, while executing starts a timer, and when done stops the timer. The $RUNTIME variable value is in seconds, so the variable usually equals a number like 126 (equals 2 minutes 6 seconds). In my script I... (3 Replies)
Discussion started by: vikingshelmut
3 Replies

2. Shell Programming and Scripting

replace time format

Hello All, I have a problem with the following text file. For the field number 5 which is the time format (hh:mm:ss). But I would like to delete "ss" and showing hh:mm only. 00001,CLIENT,Company,1218,N,1:04,35,0.211,0,0.211,1.155531,0:00,0,0,0,0,0,1:04,35,0.211,0,0.211,1.155531,foold... (16 Replies)
Discussion started by: happyv
16 Replies

3. Shell Programming and Scripting

time format..

HI.. I have some files...when doing "ls -l" its like this.. -rwxr-xr-x 1 e2e e2e 747 Aug 30 15:18 abc.txt how can I get the number YYYYMMDD from this...( since I need to compare this number with some other value..) with the help of date/awk/sed/epoch or whatever u... (1 Reply)
Discussion started by: clx
1 Replies

4. Shell Programming and Scripting

help in time format

how to grep 30 mins from starting time of script let for example,script runs at 02:00am....i want to grep from 01.30 till 02:00 ------------------------------------------------------------------- how to achive this in a k-shell script ? (3 Replies)
Discussion started by: ali560045
3 Replies

5. Shell Programming and Scripting

Convert Epoch time format to normal date time format in the same file

I have a file named "suspected" with series of line like these : {'protocol': 17, 'service': 'BitTorrent KRPC', 'server': '219.78.120.166', 'client_port': 52044, 'client': '10.64.68.44', 'server_port': 8291, 'time': 1226506312L, 'serverhostname': ''} {'protocol': 17, 'service': 'BitTorrent... (3 Replies)
Discussion started by: rk4k
3 Replies

6. Shell Programming and Scripting

Date and Time format

I want to append current date and time to a file name like filename_090920091210. If I use filename_`date +%d%m%Y%T`, the ouput is filename_0909200912:10:33. How to format this as filename_090920091210. Please let me know. Thanks in advance. (3 Replies)
Discussion started by: srimenon09
3 Replies

7. Shell Programming and Scripting

time format

Hello Guys. I have copied the following from the time man pages time -f "%E real,%U user,%S sys" ls -Fs But I am getting -f: command not found Regards (3 Replies)
Discussion started by: fdc2suxs
3 Replies

8. Shell Programming and Scripting

How to add missing date and time in a bash script?

Hi Again, I have a file that contains date and time for the past 2 hours. What i need is add missing date and time in a file. INPUT 2016-01-13 01:33 10 2016-01-13 01:31 10 2016-01-13 01:30 10 2016-01-13 01:29 10 2016-01-13 01:28 10 2016-01-13 01:27 10 2016-01-13 01:26 10 2016-01-13... (14 Replies)
Discussion started by: ernesto
14 Replies

9. Post Here to Contact Site Administrators and Moderators

Display time in 12 hr format

Write a script named time that displays the time in standard 12-hour format, rather than 24-hour format. Allow the user to give a -m option to get 24-hour format. For example: > date Sun Feb 10 10:56:50 CST 2008 > time 10:56 AM > date Sun Feb 10 21:57:07 CST 2008 > time 9:57 PM >... (0 Replies)
Discussion started by: satish24
0 Replies

10. Shell Programming and Scripting

Calculate Time diff in milli milliseconds(Time format : HH:MM:SS,NNN)

Hi All, I have one file which contains time for request and response. I want to calculate time difference in milliseconds for each line. This file can contain 10K lines. Sample file with 4 lines. for first line. Request Time: 15:23:45,255 Response Time: 15:23:45,258 Time diff... (6 Replies)
Discussion started by: Raza Ali
6 Replies
fnmatch(5)						Standards, Environments, and Macros						fnmatch(5)

NAME
fnmatch - file name pattern matching DESCRIPTION
The pattern matching notation described below is used to specify patterns for matching strings in the shell. Historically, pattern match- ing notation is related to, but slightly different from, the regular expression notation. For this reason, the description of the rules for this pattern matching notation is based on the description of regular expression notation described on the regex(5) manual page. Patterns Matching a Single Character The following patterns matching a single character match a single character: ordinary characters, special pattern characters and pattern bracket expressions. The pattern bracket expression will also match a single collating element. An ordinary character is a pattern that matches itself. It can be any character in the supported character set except for NUL, those spe- cial shell characters that require quoting, and the following three special pattern characters. Matching is based on the bit pattern used for encoding the character, not on the graphic representation of the character. If any character (ordinary, shell special, or pattern spe- cial) is quoted, that pattern will match the character itself. The shell special characters always require quoting. When unquoted and outside a bracket expression, the following three characters will have special meaning in the specification of patterns: ? A question-mark is a pattern that will match any character. * An asterisk is a pattern that will match multiple characters, as described in Patterns Matching Multiple Characters, below. [ The open bracket will introduce a pattern bracket expression. The description of basic regular expression bracket expressions on the regex(5) manual page also applies to the pattern bracket expression, except that the exclamation-mark character ( ! ) replaces the circumflex character (^) in its role in a non-matching list in the regular expression notation. A bracket expression starting with an unquoted circumflex character produces unspecified results. The restriction on a circumflex in a bracket expression is to allow implementations that support pattern matching using the circumflex as the negation character in addition to the exclamation-mark. A portable application must use something like [^!] to match either character. When pattern matching is used where shell quote removal is not performed (such as in the argument to the find -name primary when find is being called using one of the exec functions, or in the pattern argument to the fnmatch(3C) function, special characters can be escaped to remove their special meaning by preceding them with a backslash character. This escaping backslash will be discarded. The sequence \ rep- resents one literal backslash. All of the requirements and effects of quoting on ordinary, shell special and special pattern characters will apply to escaping in this context. Both quoting and escaping are described here because pattern matching must work in three separate circumstances: o Calling directly upon the shell, such as in pathname expansion or in a case statement. All of the following will match the string or file abc: abc "abc" a"b"c ac a[b]c a["b"]c a[]c a[""]c a?c a*c The following will not: "a?c" a*c a[b]c o Calling a utility or function without going through a shell, as described for find(1) and the function fnmatch(3C) o Calling utilities such as find, cpio, tar or pax through the shell command line. In this case, shell quote removal is performed before the utility sees the argument. For example, in: find /bin -name ec[h]o -print after quote removal, the backslashes are presented to find and it treats them as escape characters. Both precede ordinary characters, so the c and h represent themselves and echo would be found on many historical systems (that have it in /bin). To find a file name that con- tained shell special characters or pattern characters, both quoting and escaping are required, such as: pax -r ... "*a(?" to extract a filename ending with a(?. Conforming applications are required to quote or escape the shell special characters (sometimes called metacharacters). If used without this protection, syntax errors can result or implementation extensions can be triggered. For example, the KornShell supports a series of extensions based on parentheses in patterns; see ksh(1) Patterns Matching Multiple Characters The following rules are used to construct patterns matching multiple characters from patterns matching a single character: o The asterisk (*) is a pattern that will match any string, including the null string. o The concatenation of patterns matching a single character is a valid pattern that will match the concatenation of the single charac- ters or collating elements matched by each of the concatenated patterns. o The concatenation of one or more patterns matching a single character with one or more asterisks is a valid pattern. In such patterns, each asterisk will match a string of zero or more characters, matching the greatest possible number of characters that still allows the remainder of the pattern to match the string. Since each asterisk matches zero or more occurrences, the patterns a*b and a**b have identical functionality. Examples: a[bc] matches the strings ab and ac. a*d matches the strings ad, abd and abcd, but not the string abc. a*d* matches the strings ad, abcd, abcdef, aaaad and adddd. *a*d matches the strings ad, abcd, efabcd, aaaad and adddd. Patterns Used for Filename Expansion The rules described so far in Patterns Matching Multiple Characters and Patterns Matching a Single Character are qualified by the following rules that apply when pattern matching notation is used for filename expansion. 1. The slash character in a pathname must be explicitly matched by using one or more slashes in the pattern; it cannot be matched by the asterisk or question-mark special characters or by a bracket expression. Slashes in the pattern are identified before bracket expres- sions; thus, a slash cannot be included in a pattern bracket expression used for filename expansion. For example, the pattern a[b/c]d will not match such pathnames as abd or a/d. It will only match a pathname of literally a[b/c]d. 2. If a filename begins with a period (.), the period must be explicitly matched by using a period as the first character of the pattern or immediately following a slash character. The leading period will not be matched by: o the asterisk or question-mark special characters o a bracket expression containing a non-matching list, such as: [!a] a range expression, such as: [%-0] or a character class expression, such as: [[:punct:]] It is unspecified whether an explicit period in a bracket expression matching list, such as: [.abc] can match a leading period in a filename. 3. Specified patterns are matched against existing filenames and pathnames, as appropriate. Each component that contains a pattern char- acter requires read permission in the directory containing that component. Any component, except the last, that does not contain a pat- tern character requires search permission. For example, given the pattern: /foo/bar/x*/bam search permission is needed for directories / and foo, search and read permissions are needed for directory bar, and search permission is needed for each x* directory. If the pattern matches any existing filenames or pathnames, the pattern will be replaced with those filenames and pathnames, sorted according to the collating sequence in effect in the current locale. If the pattern contains an invalid bracket expression or does not match any existing filenames or pathnames, the pattern string is left unchanged. SEE ALSO
find(1), ksh(1), fnmatch(3C), regex(5) SunOS 5.10 28 Mar 1995 fnmatch(5)
All times are GMT -4. The time now is 06:52 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy