Have a situation while extracting info


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Have a situation while extracting info
# 1  
Old 09-25-2014
Error Have a situation while extracting info

i have a text file which i am generating from few sqls.
format is like :
Code:
col1   col2      col3     col4           col5
1001     DONE     ABC     17-sep-14   12:02:05
1001     DONE     ABC     17-sep-14   12:02:05
1001     DONE     ABC      17-sep-14  12:02:55
1001     REDONE  ABC      17-sep-14   14:00:12
1001     REDONE  ABC      17-sep-14   14:00:15
1001     DONE     ABC      17-sep-14   19:02:10 
1001     DONE     ABC      17-sep-14   19:10:02
1001     REDONE  ABC      18-sep-14   13:00:00
1001     REDONE  ABC      18-sep-14   13:00:00
1001     REDONE  ABC      18-sep-14   13:00:00
1001     DONE     ABC      18-sep-14   16:03:16

i want to capture when DONE and REDONE was done , all occurrence's report , one for each time . output as below :
Code:
1001   DONE   ABC   17-sep-14    12:02:05
1001 REDONE  ABC   17-seo-14    14:00:12
1001 DONE     ABC    17-sep-14    19:10:02
1001 REDONE  ABC    18-seo-14    13:00:00
1001 DONE     ABC    18-sep-14    16:03:16

IMP note - date and time filed can have any value , no rule. 2nd column , DONE and REDONE can have any combination , we just need to find out what is present in 2nd column and fetch one occurrence from each time for DONE and REDONE .

Last edited by vgersh99; 09-25-2014 at 12:00 PM.. Reason: please use code tags!
# 2  
Old 09-25-2014
Yes?
What have you tried so far?
# 3  
Old 09-25-2014
something along these lines?
Code:
awk 'a!=$2{print;a=$2}' myFile

# 4  
Old 09-26-2014
Not sure exactly what cols you are trying to match on.

Below is matching on columns 2 4 and 5 (adjust columns used as you need):

Code:
$ awk '!a[$2,$4,5]++' infile
col1   col2      col3     col4           col5
1001     DONE     ABC     17-sep-14   12:02:05
1001     REDONE  ABC      17-sep-14   14:00:12
1001     REDONE  ABC      18-sep-14   13:00:00
1001     DONE     ABC      18-sep-14   16:03:16

# 5  
Old 09-30-2014
thanks guys , i am able to handle this situation . actually i used both methods from chubler_XL and vgersh99 .

let me explain in details what exactly i have and why i used both and still may be we can use one method instead of 2.
1. i am extracting some data from 2 tables , that will be in a text file.
2. now i want to sort/extract data from that text file based on my requirement .
3. date may vary , and so status .
4. for each num, Status can be any value , either DONE or REDONE. for same NUM, sequence can be DONE, DONE, REDONE, DONE
but if i use awk 'a!=$2{print;a=$2}' myFile -> it returns DONE, REDONE , DONE only for same NAME column.
5. if ENV column values are different but STATUS column value is same(DONE or REDONE), above logic will not work, it will return one row only. then i used this logic awk '!a[$2,$4,5]++' infile

how to get desired output in one command , right now i am using both logic in IF loop

Code:
NUM      Status      NAME                                ENV                        DATE       Time
100050596 DONE        PAB                              scotau1@csomrc1           23-SEP-14 06:49:33
 100050596 DONE        PAB                             scotau1@csomrc1           23-SEP-14 06:49:36
 100050596 DONE        PAB                              scotau1@csomrc1           23-SEP-14 06:49:38
 100050596 DONE        PAB                              scotau2@csomrc1           23-SEP-14 06:51:51
 100050596 DONE        PAB                              scotau2@csomrc1           23-SEP-14 06:51:53
 100050596 DONE        PAB                              scotau2@csomrc1           23-SEP-14 06:51:56
 100050596 DONE        PAB                              scotau3@csomrc1           23-SEP-14 06:53:05
 100050596 DONE        PAB                              scotau3@csomrc1           23-SEP-14 06:53:08
 100050596 DONE        PAB                              scotau3@csomrc1           23-SEP-14 06:53:10
100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 20:58:42
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 20:58:56
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 20:59:09
 100051482 UNDONE      SMO                              occbap1@hppabc1          24-SEP-14 21:04:25
 100051482 UNDONE      SMO                              occbap1@hppabc1          24-SEP-14 21:04:38
 100051482 UNDONE      SMO                              occbap1@hppabc1          24-SEP-14 21:04:51
 100051482 DONE        SMO                             occbap1@hppabc1          24-SEP-14 21:05:52
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 21:06:06
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 21:06:19
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 21:06:32
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 21:07:25
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 21:07:38
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 21:07:51
 100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 21:08:04


Last edited by deepakiniimt; 09-30-2014 at 01:22 AM.. Reason: Add CODE tags.
# 6  
Old 09-30-2014
It sounds like you only want to match on columns 2 and 4 correct?

Then for you new infile you can use:

Code:
$ awk '!a[$2,$4]++' infile
NUM  Status      NAME                             ENV                              DATE       Time
100050596 DONE        PAB                              scotau1@csomrc1           23-SEP-14 06:49:33
 100050596 DONE        PAB                              scotau2@csomrc1           23-SEP-14 06:51:51
 100050596 DONE        PAB                              scotau3@csomrc1           23-SEP-14 06:53:05
100051482 DONE        SMO                              occbap1@hppabc1          24-SEP-14 20:58:42
 100051482 UNDONE      SMO                              occbap1@hppabc1          24-SEP-14 21:04:25


Last edited by Chubler_XL; 09-30-2014 at 01:24 AM.. Reason: Adjusted for CODE tag version of input
# 7  
Old 09-30-2014
my earlier logic in IF loop was missing some info which is coming now using your new command but still few info is missing , let me tell you that:
logic which i am using [file.lst is having all the extracted data from DB tables]

Code:
for i in `cat file.lst|awk '{print $1}'|sort|uniq`
do
   if [[ `cat file.lst |grep $i |awk '{print $2}'|grep UNDONE |wc -l` -gt "0" ]]
                then
                cat file.lst |grep $i |awk 'a!=$2{print;a=$2}'
                else
                cat file.lst |grep $i |awk '!a[$2,$4,5]++'
                fi

 done >> file.tmp

using this code , i was not getting below type of info, which i am getting now using your latest command:
earlier
Code:
 100050910 DONE        MRC                              taumrc1@taumrct1          08-SEP-14 09:42:16
 100050910 UNDONE      MRC                              taumrc1@taumrct1          09-SEP-14 18:05:26

now [which is correct because 4th column, ENV is having different env names]
Code:
 100050910 DONE        MRC                              taumrc1@taumrct1          08-SEP-14 09:42:16
 100050910 DONE        MRC                              taumrc2@taumrct1          08-SEP-14 09:44:06
 100050910 DONE        MRC                              taumrc3@taumrct1          08-SEP-14 09:46:15
 100050910 UNDONE      MRC                              taumrc1@taumrct1          09-SEP-14 18:05:26

But one info was missed from new logic :
earlier [which is correct]
Code:
 100051336 DEPLOYED        SMO                              occbap1@hppabc1          19-SEP-14 12:35:31
 100051336 UNDEPLOYED      SMO                              occbap1@hppabc1          19-SEP-14 12:40:01
 100051336 DEPLOYED        SMO                              occbap1@hppabc1          19-SEP-14 12:42:24
 100051336 UNDEPLOYED      SMO                              occbap1@hppabc1          19-SEP-14 12:46:15
 100051336 DEPLOYED        SMO                              occbap1@hppabc1          19-SEP-14 12:50:32
 100051336 UNDEPLOYED      SMO                              occbap1@hppabc1          19-SEP-14 12:55:53
 100051336 DEPLOYED        SMO                              occbap1@hppabc1          19-SEP-14 12:58:32
 100051336 UNDEPLOYED      SMO                              occbap1@hppabc1          19-SEP-14 13:13:15

now
Code:
 100051336 DEPLOYED        SMO                              occbap1@hppabc1          19-SEP-14 12:35:31
 100051336 UNDEPLOYED      SMO                              occbap1@hppabc1          19-SEP-14 12:40:01

Moderator's Comments:
Mod Comment Please use CODE tags (not ICODE tags) for multi-line code segments; and use CODE tags for sample input and output, not just for code segments.


---------- Post updated at 09:56 PM ---------- Previous update was at 01:32 PM ----------

any one ?

Last edited by Don Cragun; 09-30-2014 at 02:53 AM.. Reason: Fix ICODE tags; add CODE tags.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Extracting specific info finger command

how to extract user machine name for current terminal using finger command below command gives machinename for all session , is it possible to filter it to only currernt terminal ? finger -b -p $LOGNAME | grep from (12 Replies)
Discussion started by: lalitpct
12 Replies

2. Solaris

Extracting HBA Card Hardware info

Hello, I am very new to solaris so please bear with me. I have 2 machines in question. For both I am trying to get the HBA Card Hardware information such as: HBA Model Name HBA Firmware version HBA Port details HBA Driver details First machine is a Solaris 10. When I execute fcinfo... (6 Replies)
Discussion started by: flagman5
6 Replies

3. Shell Programming and Scripting

matching and extracting info from text files

Hi all, I have two .txt file i.e. First text file: 2 4 1 4 Second text file 2 1.nii.gz 4 334.nii.gz 1 12.nii.gz 4 134.nii.gz If entry in 1st column of 1st text file matches the 1st column of 2nd text file, then copy the file (name of which is the second column) associated with... (4 Replies)
Discussion started by: vd24
4 Replies

4. UNIX for Dummies Questions & Answers

Extracting 482/300k columns no's with respective info. listed in file2 from file1

Hi, I have 2 files File 1: 1 2 3 4 5 6 .......etc until column 300K 1 23 21 24 12 22 1 23 21 24 12 22 1 23 21 24 12 22 1 23 21 24 12 22 1 23 21 24 12 22 1 23 21 24 12 22 1 23 21 24 12 22 . . etc until row 1411 File 2: (14 Replies)
Discussion started by: sogi
14 Replies

5. Programming

problems iterating in RUBY while extracting info from YAML, Pls help!

Hi all, I am stuck with a ruby script that extracts detials from yaml file and processes accordingly. the yaml file confivnic: device: vnic1: policy: - L2 mode: active vnic2: policy: - L3 - L4 mode: active type: aggr ... (1 Reply)
Discussion started by: wrapster
1 Replies

6. UNIX for Dummies Questions & Answers

help : crisis situation !!

Hi I had deleted important files from my company server :( the server is HPUX and i don't know how to undo rm command or how to restore the files .. iam appreciate for any help Thanx ... (5 Replies)
Discussion started by: Eisa
5 Replies

7. UNIX for Dummies Questions & Answers

Extracting spec info from finger.

Hi everyone, I'm trying to extract the user name and full name from the finger command without using sed or awk. Any pointers? Thanks in advance. (6 Replies)
Discussion started by: franny
6 Replies

8. UNIX for Dummies Questions & Answers

Extracting specific info from finger command

Hello all, my unix is bash based and the finger command output is: Login Name Tty Idle LoginTime Office amos.john Amos John pts/26 1 Dec 5 16:18 (77.100.22.07) What am trying to achieve is extract the Login (amos.john) and Name (Amos John) from this output without using awk or sed. ... (1 Reply)
Discussion started by: franny
1 Replies

9. UNIX for Dummies Questions & Answers

Extracting Info

i have a file that contain lines like this 9.4.7.8.5.7.9.0.5.7.1.2.msisdn.sub.cs. 1 IN CNAME SDP01.cs. there are about 50,000 lines like this in the files i want to the extract the digits from the above line like:- 947857905712 OS Solaris9 (3 Replies)
Discussion started by: muneebr
3 Replies

10. UNIX for Advanced & Expert Users

extracting info from Unix database to construct a visual diagram

Ok heres the situation, We use Solaris 8 at work with Sybase for the db. I need to be able to easily create visual diagrams of some of our more complex systems. I've been using Visio which is such a manual process and takes a while. I was thinking maybe using Visio somehow in conjunction... (0 Replies)
Discussion started by: fusion99
0 Replies
Login or Register to Ask a Question