How to get fields and get output with awk or shell script.?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to get fields and get output with awk or shell script.?
# 1  
Old 11-14-2012
How to get fields and get output with awk or shell script.?

I have a flat file A.txt with field seperate by a pipe
Code:
2012/11/13 20:06:11 |  284:hawk   pid=014268 opened Locations 12, 13, 14, 15 for /home/hawk_t112/t112/macteam/qt/NET12/full_ddr3_2X_FV_4BD_1.qt/dbFiles/t112.proto|2012/11/14 15:19:26 | still running |norway|norway
2012/11/14 12:53:51 |  286:hawk   pid=012538 opened Locations 8, 9, 10, 11 for /home/hawk_t112/t112/macteam/qt/NET08/.try_3.qt/dbFiles/t112.proto|2012/11/14 15:19:26 | still running |norway|norway
2012/11/14 14:23:19 |  288:hawk   pid=019275 opened Locations 0, 1, 2, 3, 4, 5, 6, 7 for /home/hawk_a108/a108/macteam/qt/NET24/full_111_ddr5_soq523_2X_FV.qt/dbFiles/a108.proto|2012/11/14 15:19:26 | still running |norway|norway

How do we use awk or shell program to get output file B.txt
Code:
2012/11/13 20:06:11 | Locations 12, 13, 14, 15|NET12/full_ddr3_2X_FV_4BD_1.qt|norway|norway22
** 22 is first location 12+10 ** Do not include in out put
2012/11/14 12:53:51 | Locations 8, 9, 10, 11|NET08/.try_3.qt|norway|norway18
** 18 is first Locations 8+10 *** Do not include in out put
2012/11/14 14:23:19 |Locations 0, 1, 2, 3, 4, 5, 6, 7 |NET24/full_111_ddr5_soq523_2X_FV.qt|norway|norway10
** 10 is first Locations 0+10 *** Do not include in out put

I hope you understand what i would like to get it from B.txt
Thanks.
# 2  
Old 11-14-2012
Try this:

Code:
awk -F\| '{
  sub(/.*Locations /,"",$2)
  path=val=$2
  sub(/,.*/,"",val)
  val+=10
  sub(/ for.*/,"",$2)
  sub(/.*NET/, "NET",path)
  sub(/\.qt.*/, ".qt",path)
  print $1 FS " Locations " $2 FS path FS $5 FS $6 val}' A.txt > B.txt

# 3  
Old 11-14-2012
Wow, it works beautiful. Thanks Chubler_XL
Now what if i have A.txt with extra 2nd field is 16
Code:
2012/11/13 20:06:11 |16|284:hawk   pid=014268 opened Locations 12, 13, 14, 15 for /home/hawk_t112/t112/macteam/qt/NET12/full_ddr3_2X_FV_4BD_1.qt/dbFiles/t112.proto|2012/11/14 15:19:26 | still running |norway|norway
2012/11/14 14:23:19 |16|  288:hawk   pid=019275 opened Locations 0, 1, 2, 3, 4, 5, 6, 7 for /home/hawk_a108/a108/macteam/qt/NET24/full_111_ddr5_soq523_2X_FV.qt/dbFiles/a108.proto|2012/11/14 15:19:26 | still running |norway|norway
2012/11/14 14:23:19 |4|  288:hawk   pid=019275 opened Locations 0, 1 for /home/hawk_a108/a108/macteam/qt/NET24/full_111_ddr5_soq523_2X_FV.qt/dbFiles/a108.proto|2012/11/14 15:19:26 | still running |germany|germany

How do we use awk or shell program to get output file B.txt
Code:
2012/11/13 20:06:11 | Locations 12, 13, 14, 15|NET12/full_ddr3_2X_FV_4BD_1.qt|norway|norway22
** 22 is first location 12+10 ** Do not include in out put

2012/11/14 14:23:19 |Locations 0, 1, 2, 3, 4, 5, 6, 7 |NET24/full_111_ddr5_soq523_2X_FV.qt|norway|norway10
** 10 is first Locations 0+10 *** Do not include in out put

2012/11/14 14:23:19 |4|  Locations 0, 1 |NET24/full_111_ddr5_soq523_2X_FV.qt|germany|germany10

and an output C.txt tell me that we are missing Locations like
Code:
Locations 8, 9, 10, 11|norway|Available
Locations 2,3|germany|Available

* If we see 2nd filed is 16 then location are 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
* If we see 2nd field is 4 then location only 0,1,2,3

Thanks for your reply.
# 4  
Old 11-14-2012
Try these 2:

Code:
awk -F\| '{
  sub(/.*Locations /,"",$3)
  path=val=$3
  sub(/,.*/,"",val)
  val+=10
  sub(/ for.*/,"",$3)
  sub(/.*NET/, "NET",path)
  sub(/\.qt.*/, ".qt",path)
  print $1 FS ($2=="16"?"":$2 FS) " Locations " $3 FS path FS $6 FS $7 val}' A.txt > B.txt

Code:
awk -F\| '{
  sub(/.*Locations /,"",$3)
  sub(/ for.*/,"",$3)
  L=$6
  M[L]=$2
  gsub(/, /,"|",$3)
  $0=$3
  for(i=1;i<=NF;i++) H[L,$i]
}
END {
   for(L in M) {
      V=""
      for(i=0;i<M[L];i++) if(!((L SUBSEP i) in H)) V=V", "i
      if(length(V)) print "Locations " substr(V,3) "|" L "|Available"
   }
}' A.txt > C.txt

# 5  
Old 11-15-2012
From
Code:
awk -F\| '{
  sub(/.*Locations /,"",$3)
  path=val=$3
  sub(/,.*/,"",val)
  val+=10
  sub(/ for.*/,"",$3)
  sub(/.*NET/, "NET",path)
  sub(/\.qt.*/, ".qt",path)
  print $1 FS ($2=="16"?"":$2 FS) " Locations " $3 FS path FS $6 FS $7 val}' A.txt > B.t

I got the result
Code:
2012/11/13 20:06:11 ||Locations 12, 13, 14, 15|NET12/full_ddr3_2X_FV_4BD_1.qt|norway|norway22
2012/11/14 14:23:19 ||Locations 0, 1, 2, 3, 4, 5, 6, 7|NET24/full_111_ddr5_soq523_2X_FV.qt|norway|norway10
2012/11/14 14:23:19 |4||Locations 0, 1|NET24/full_111_ddr5_soq523_2X_FV.qt|germany|germany10

and from
Code:
awk -F\| '{
  sub(/.*Locations /,"",$3)
  sub(/ for.*/,"",$3)
  L=$6
  M[L]=$2
  gsub(/, /,"|",$3)
  $0=$3
  for(i=1;i<=NF;i++) H[L,$i]
}
END {
   for(L in M) {
      V=""
      for(i=0;i<M[L];i++) if(!((L SUBSEP i) in H)) V=V", "i
      if(length(V)) print "Locations " substr(V,3) "|" L "|Available"
   }
}' A.txt > C.txt

I got the result what i dont expect
Code:
Locations 0, 1, 2, 3|germany|Available
Locations 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15|norway|Available

I should see
Code:
Locations 2,3|germany|Available
Locations 8, 9, 10, 11|norway|Available

Anyway look like it is hard to get the available locations
My last wish if you have the A.txt like this
Code:
2012/11/13 20:06:11 |284:hawk   pid=014268 opened Locations 12, 13, 14, 15 for /home/hawk_t112/t112/macteam/qt/NET12/full_ddr3_2X_FV_4BD_1.qt/dbFiles/t112.proto|2012/11/14 15:19:26 | still running |norway|16|norway
2012/11/14 14:23:19 |288:hawk   pid=019275 opened Locations 0, 1, 2, 3, 4, 5, 6, 7 for /home/hawk_a108/a108/macteam/qt/NET24/full_111_ddr5_soq523_2X_FV.qt/dbFiles/a108.proto|2012/11/14 15:19:26 | still running |norway|16|norway
2012/11/14 14:23:19 |288:hawk   pid=019275 opened Locations 0, 1 for /home/hawk_a108/a108/macteam/qt/NET24/full_111_ddr5_soq523_2X_FV.qt/dbFiles/a108.proto|2012/11/14 15:19:26 | still running |germany|4|germany

Now the 2nd fields was moved to last 2nd fields.
How do i get the result
Code:
2012/11/13 20:06:11 |t112|Boards 12, 13, 14, 15|NET12/full_ddr3_2X_FV_4BD_1.qt|norway|norway22
2012/11/14 14:23:19 |t112|Boards 0, 1, 2, 3, 4, 5, 6, 7|NET24/full_111_ddr5_soq523_2X_FV.qt|norway|norway10
2012/11/14 14:23:19 |a108|Boards 0, 1|NET24/full_111_ddr5_soq523_2X_FV.qt|germany|germany10

Thank you so much.
# 6  
Old 11-15-2012
Try

Code:
awk -F\| '{
  sub(/.*Locations /,"",$2)
  path=val=$2
  sub(/,.*/,"",val)
  val+=10
  sub(/ for.*/,"",$2)
  sub(/.*for /,"",path)
  split(path, p, "/")
  print $1 FS p[4] FS "Boards " $2 FS p[7] "/" p[8] FS $5 FS $7 val}' A.txt

# 7  
Old 11-15-2012
Works so beautiful. Thanks Chubler_XL
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Shell script to call and sort awk script and output

I'm trying to create a shell script that takes a awk script that I wrote and a filename as an argument. I was able to get that done but I'm having trouble figuring out how to keep the header of the output at the top but sort the rest of the rows alphabetically. This is what I have now but it is... (1 Reply)
Discussion started by: Eric7giants
1 Replies

2. Shell Programming and Scripting

awk to output match and mismatch with count using specific fields

In the below awk I am trying output to one file those lines that match between $2,$3,$4 of file1 and file2 with the count in (). I am also trying to output those lines that are missing between $2,$3,$4 of file1 and file2 with the count of in () each. Both input files are tab-delimited, but the... (7 Replies)
Discussion started by: cmccabe
7 Replies

3. Shell Programming and Scripting

Shell script to pull certain fields

I/m a beginner so be easy. I have text files that live on an AIX server. The files come in and I've been charged with writing a shell script to email out that pulls the first date, and the last date of the file. I need to load these 2 dates into 2 separate variables. I can figure out the variables,... (13 Replies)
Discussion started by: mattadams1983
13 Replies

4. Shell Programming and Scripting

XML Fields comparison using awk script

Hello All, I have many zipped XMLs (example file name in tgz formate - file_rec.trx.2016-01-23.000123.exc.85sesdzd45wsds5299c8f2994f7.tgz) looks following and I need to verify two numbers, they are RecordNumber and EnrolData (only sequence number, NOT hole). for all the records, both should be... (5 Replies)
Discussion started by: VasuKukkapalli
5 Replies

5. Shell Programming and Scripting

awk help: Match data fields from 2 files & output results from both into 1 file

I need to take 2 input files and create 1 output based on matches from each file. I am looking to match field #1 in both files (Userid) and create an output file that will be a combination of fields from both file1 and file2 if there are any differences in the fields 2,3,4,5,or 6. Below is an... (5 Replies)
Discussion started by: ambroze
5 Replies

6. Shell Programming and Scripting

Aligning output with null fields in shell script

Hello Gurus ! I have what probably amounts to a few simply changes to fix; however for the life of me I cannot seem to get it ti work. I need to align the output of my script (I am writing to a logfile)... here's the lines in my code: if then echo "NODE: $node" >> $logfile... (6 Replies)
Discussion started by: gvolpini
6 Replies

7. Shell Programming and Scripting

awk to compare diff output by fields

Diff output as follows: < AAA BBB CCC DDD EEE 123 > PPP QQQ RRR SSS TTT 111 > VVV WWW XXX YYY ZZZ 333 > AAA BBB CCC DDD EEE 124 How can i use awk to compare the last field to determine if the counter has increased, and need to ensure that the first 4 fields must have the same... (15 Replies)
Discussion started by: ux4me
15 Replies

8. Shell Programming and Scripting

AWK Compare files, different fields, output

Hi All, Looking for a quick AWK script to output some differences between two files. FILE1 device1 1.1.1.1 PINGS device1 2.2.2.2 PINGS FILE2 2862 SITE1 device1-prod 1.1.1.1 icmp - 0 ... (4 Replies)
Discussion started by: stacky69
4 Replies

9. Shell Programming and Scripting

awk script to (un)/concatenate fields in file

Hi everyone, I'm trying to use the "join" function for more than 1 field. Since it's not possible as it is, I want to take my input files and concatenate the joining fields as 1 field (separated by "|"). I wrote 2 awk script to do and undo it (see below). However I'm new to awk and I'm certain I... (5 Replies)
Discussion started by: anthony.cros
5 Replies

10. Shell Programming and Scripting

AWK Merge Fields for Print Output

I've got a file with each record on a separate line and each record contains 34 fields separated by a colon and i'm trying to re-arrange the order of the fields and merge together certain fields separated by a slash (like field7/field28). I tried using an awk print statement like awk -F: 'BEGIN... (5 Replies)
Discussion started by: RacerX
5 Replies
Login or Register to Ask a Question