Here is a commented version of the script I suggested:
Code:
#!/bin/ksh
# Set IAm to the final component of the pathname used to invoke this script.
IAm=${0##*/}
# If the number of operands given to this script is not 3, print a usage
# message to the standard error output and exit.
if [ $# -ne 3 ]
then printf 'Usage: %s year.month1 year.month2 filename\n' "$IAm" >&2
exit 1
fi
# Use awk to print any line in the file whose pathname is given by the 3rd
# operand to this script ("$3") where the field separator for lines in the file
# is set to a <period> character (-F'.') and:
# 1. the input line number is 1 (NR==1): to print the header, or (||)
# 2. the 1st field followed by the field separator followed by the 2nd field
# is the string specified by the 1st operand to this script (-v ym1="$1")
# and ($1 FS $2==ym1): to print lines matching the 1st given year
# and month, or (||)
# 3. the 1st field followed by the field separator followed by the 2nd field
# is the string specified by the 2nd operand to this script (-v ym2="$2")
# and ($1 FS $2==ym2): to print lines matching the 2nd given year
# and month.
awk -F'.' -v ym1="$1" -v ym2="$2" 'NR==1 || $1 FS $2==ym1 || $1 FS $2==ym2' "$3"
Is this enough explanation, or is there something that still isn't clear?
If the date you want to process is in the 12th field and the field separator is a <tab> character and there is no header line (or the header line does not appear as the 1st line and doesn't need to be copied to the output) as in your latest sample input, you could try the following script instead:
Code:
#!/bin/ksh
# Set IAm to the final component of the pathname used to invoke this script.
IAm=${0##*/}
# If the number of operands given to this script is not 3, print a usage
# message and exit.
if [ $# -ne 3 ]
then printf 'Usage: %s year.month1 year.month2 filename\n' "$IAm" >&2
exit 1
fi
awk -F'\t' -v ym1="$1" -v ym2="$2" '
#NR == 1 {
# The following code to print the header has been removed because the sample
# data does not have a header line.
# # Print the header line and skip further processing for this line.
# print
# next
#}
{ # Split the 12th tab separated field into the ymd[] array using
# <period> as the field # separator within this field.
split($12, ymd, /[.]/)
#printf("$12=%s, ymd[1]=%s, ymd[2]=%s\n", $12, ymd[1], ymd[2])
# Print this line if ym1 or ym2 is the same string as ymd[1] "." ymd[2].
if(ym1 == ymd[1] "." ymd[2] || ym2 == ymd[1] "." ymd[2])
print
}' "$3"
If someone wants to try either of the above scripts on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk or nawk.
As has been said before, giving us data that is not at all representative of the data you want to process, not telling us what the field separator is in the data you want to process, and continually changing your requirements is a huge waste of everyone's time.
I hope the above helps you, but if this still doesn't meet your requirements, we have little incentive to try to help if your requirements change again.
This User Gave Thanks to Don Cragun For This Post:
I want a shell script which extract data from a log file which contains date and time-wise data and i need the data for a perticular interval of time...what can i do??? (3 Replies)
I need to be able to use the current date and calculate 7 days ago to be stored in another variable to be passed to a file in my Unix shell script. I need the date in the following format:
date '+%m/%d/%Y'
or
05/16/2006
How do I calculate date minus 7 days or 1 week ago? (8 Replies)
Hi Gurus,
I am writing a script where we enter two dates, one a FROM DATE and the other a TO DATE. I need to validate that difference between the two dates is always less than or equal to 60 days.
I could not find any date utility in ksh that could help me with this.
Finally, I am deciding... (5 Replies)
Hi all,
this is my first post, i need to write a script to zip the files with datewise below are the log files.
-rw------- 1 root sso 85316156 May 24 22:11 core_test_smservaz_104_104_1243217459_8896
-rw------- 1 root sso 90413304 May 25 22:12 core_test_smservaz_104_104_1243303895_20912... (4 Replies)
Hi guys,
I want to delete files from june 13 to june 30, using rm command can any one tell me the sintax to remove. I ahve hunderd of core files in my /var dir. so i want to clear last month core files. Thanks in Advance.:)) (2 Replies)
Hi all,
Thanks in Advance , i am very new to programming part in script i think using some caluations+ sed command only we can do this process in script.
for exampl:
i have file in that one line is like this
using sed i can replace the date and all but my requirement is
The... (3 Replies)
Hi All,
I would have many files in the server with
xyz*.dat -- Static file name
Physical files:
xyz1.dat - 01PM
xyz2.dat - 02PM
xyz3.dat - 03PM
In present version we are using
for f in $file_name
do
fname=`ls $f | grep -v ^'\|'$ | sed s/' '/'\\ '/g`
....
sqlldr... (4 Replies)
Hi All,
I have a file with below content
01/22/2014,23:43:00,1742.8,
01/22/2014,23:43:00,1742.8,
01/22/2014,23:44:00,1749.06666666667,
01/25/2014,23:45:00,2046.45,
01/25/2014,23:43:00,1742.8,
01/25/2014,23:44:00,1749.06666666667,
01/25/2014,23:45:00,2046.45,
01/25/2014,23:43:00,1742.8,... (4 Replies)
Hi All,
hope you all are doing well!
I kindly ask you for shell scripting help, here is the description:
I have huge number of files shown below on date wise, which contains different strings(numbers you can say) including 505001 and 602001.
... (14 Replies)
Hi
The file contains 12 months of date and less than 12 months of data I want to display if date filed less than 12 months of data I want to insert a value amount 1 to amount4 0 and dates as well.
12345|Date|cntry|amount1|amount2|amount3|amoun4... (2 Replies)