awk multiple fields separators


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk multiple fields separators
# 1  
Old 12-01-2014
awk multiple fields separators

Can you please help me with this ....

Input File
Code:
 
share "FTPTransfer" "/v31_fs01/root/FTP-Transfer" umask=022 maxusr=4294967295 netbios=NJ09FIL530
share "Test" "/v31_fs01/root/Test" umask=022 maxusr=4294967295 netbios=NJ09FIL530
share "ENR California" "/v31_fs01/root/ENR California" umask=022 maxusr=4294967295 netbios=NJ09FIL530
share "ENR Midwest" "/v31_fs01/root/ENR Midwest" umask=022 maxusr=4294967295 netbios=NJ09FIL530

Output Needed

Code:
 
v31_fs01,[FTPTransfer](NJ09FIL530),[/v31_fs01/root/FTP-Transfer]
v31_fs01,[Test](NJ09FIL530),[/v31_fs01/root/Test]
v31_fs01,[ENR California](NJ09FIL530),[/v31_fs01/root/ENR California]
v31_fs01,[ENR Midwest](NJ09FIL530),[/v31_fs01/root/ENR Midwest]

1st field is the one right after the first "/"
2nd field is a combination of between the first set of "" and the data right next to NetBIOS=
3rd field is data between second set of ""

Thanks !
# 2  
Old 12-01-2014
A perlish solution:
Code:
$ perl -ne '
  @F = m{^[^"]+"([^"]+)"\s+"(/([^/"]+)[^"]*)".*netbios=(\S+)}i;
  print $F[2], ",[", $F[0], "](", $F[3], "),[", $F[1], "]\n";
' file
v31_fs01,[FTPTransfer](NJ09FIL530),[/v31_fs01/root/FTP-Transfer]
v31_fs01,[Test](NJ09FIL530),[/v31_fs01/root/Test]
v31_fs01,[ENR California](NJ09FIL530),[/v31_fs01/root/ENR California]
v31_fs01,[ENR Midwest](NJ09FIL530),[/v31_fs01/root/ENR Midwest]

(lines split for easier reading)
This User Gave Thanks to derekludwig For This Post:
# 3  
Old 12-01-2014
works grt ...! any possibility with AWK ?
# 4  
Old 12-01-2014
Something like:
Code:
BEGIN {
  FS = "\" \"|\" | \""; 
  OFS = ",";
}

{
  split($3, P, "/");

  N = "<unknown>"; # netbios name
  n = split($4, A, "[ =]");
  for (i = 1; i <= n; i += 2) { if (A[i] == "netbios") N = A[i+1]; }

  print P[2], "[" $2 "]", "(" N ")", "[" $3 "]";
}

This User Gave Thanks to derekludwig For This Post:
# 5  
Old 12-01-2014
For given sample input this will work

Either setting FS
Code:
awk -F'"|=' '{split($4,A,/\//); print A[2],"["$2"]("$NF")","["$4"]"}' OFS=, infile

OR lengthy match
Code:
awk '{print substr($0,match($0,/"\/[^"\/]*/)+2,RLENGTH-2), "["substr($0,match($0,/"[^"]*"/)+1,RLENGTH-2)"]("substr($0,match($0,/[^netbios=]*$/))")","["substr($0,match($0,/"\/[^"]*/)+1,RLENGTH-1)"]"}' OFS=, infile


Code:
awk '
     {
	f1 = substr($0,match($0,/"\/[^"\/]*/)+2,RLENGTH-2)
	f2 = sprintf("[%s](%s)",substr($0,match($0,/"[^"]*"/)+1,RLENGTH-2),substr($0,match($0,/[^netbios=]*$/)))
	f3 = sprintf("[%s]",substr($0,match($0,/"\/[^"]*/)+1,RLENGTH-1))
	
	print f1,f2,f3
     } 
    ' OFS=, infile


Last edited by Akshay Hegde; 12-01-2014 at 11:25 AM..
This User Gave Thanks to Akshay Hegde For This Post:
# 6  
Old 12-03-2014
How about this ..derekludwig

Code:
 
export "/0014apps" name="/reet" root=10.200.12.29:10.200.12.32 access=10.200.12.29:10.200.12.32
export "/0016apps" ro=10.202.140.3 root=10.202.140.34:10.202.140.37 access=10.202.140.34:10.202.140.37 
export "/tech_st" root=10.202.98.59 rw=10.202.98.5 access=10.202.98.59 


Output
Code:
[/0014apps],[/reet],[10.200.12.29:10.200.12.32],[10.200.12.29:10.200.12.32],,
[/0016apps],,[10.202.140.34:10.202.140.37],[10.202.140.34:10.202.140.37],[10.202.140.3],
[/tech_st],,[10.202.98.59],[10.202.98.59],,[10.202.98.5]



Where $1=path
$2="name="
$3="root="
$4="access="
$5="ro="
$6="rw="

Empty space for missing fields ... order of fields may be different
THanks again !!
# 7  
Old 12-03-2014
It does not help leaving the windows <CR> line separators in your sample. Get rid of them first.

Then try
Code:
awk     'BEGIN          {nK=split ("name root access ro rw", K)}
                        {gsub (/"/,"")
                         for (i=3; i<=NF; i++) {split($i, T, "="); O[T[1]]=T[2]}

                         printf "[%s]", $2
                         for (i=1; i<=nK; i++) printf ",%s", O[K[i]]?"["O[K[i]]"]":""
                         printf "\n"
                         delete O
                        }
        ' file
[/0014apps],[/reet],[10.200.12.29:10.200.12.32],[10.200.12.29:10.200.12.32],,
[/0016apps],,[10.202.140.34:10.202.140.37],[10.202.140.34:10.202.140.37],[10.202.140.3],
[/tech_st],,[10.202.98.59],[10.202.98.59],,[10.202.98.5]

This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Print multiple fields with awk

so its common knowledge one can print multiple fields with simple commands like this: echo 12 44 45 552 24 | awk '{print $1,$4,$3}' but suppose i want to avoid specifying the "$" symbol. is that possible? can something like this be done: echo 12 44 45 552 24 | awk '{print $(1,4,3)}' ... (9 Replies)
Discussion started by: SkySmart
9 Replies

2. Shell Programming and Scripting

awk multiple filed separators

There is an usual ifconfig output vlan30 Link encap:Ethernet HWaddr inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: 2407:4c00:0:1:aaff::1/64 Scope:Global inet6 addr: fe80::224:e8ff:fe6b:cc4f/64 Scope:Link UP BROADCAST... (1 Reply)
Discussion started by: urello
1 Replies

3. Shell Programming and Scripting

Replace 0 with 1 in multiple fields with awk

Hello, I have the following input file: 1 3 3 2 3 3 4 0 4 0 5 4 5 2 2 0 5 3 4 0 6 0 3 2 I am trying to remove all zeroes in fields 2 and 4 and replace them with "1's" I tried the following, but it's not working awk -F"\t" '{ if (($2==0) || ($4==0) $2=1; $4=1; print $0 ) }' input ... (8 Replies)
Discussion started by: Rabu
8 Replies

4. Shell Programming and Scripting

Multiple long field separators

How do I use multiple field separators in awk? I know that if I use awk -F"", both a and b will be field separators. But what if I need two field separators that both are longer than one letter? If I want the field separators to be "ab" and "cd", I will not be able to use awk -F"". The ... (2 Replies)
Discussion started by: locoroco
2 Replies

5. Shell Programming and Scripting

awk gsub multiple fields

Hi, I am trying to execute this line awk -F ";" -v OFS=";" '{gsub(/\./,",",$6); print}' FILE but for multiple fields $6 $7 $8 Do you have a suggstion? Tried: awk -F ";" -v OFS="";"" "function GSUB( F ) {gsub(/\./,\",\",$F); print} { GSUB( 6 ); GSUB( 7 ); GSUB( 8 ) } 1"... (2 Replies)
Discussion started by: nakaedu
2 Replies

6. Shell Programming and Scripting

AWK multiple fields separators

I need to print the second field of a file, taking spaces, tab and = as field separators. ; for 16-bit app support MAPI=1 CMC=1 CMCDLLNAME32=mapi32.dll CMCDLLNAME=mapi.dll MAPIX=1 MAPIXVER=1.0.0.1 OLEMessaging=1 asf=MPEGVideo asx=MPEGVideo ivf=MPEGVideo m3u=MPEGVideo (2 Replies)
Discussion started by: PamPam
2 Replies

7. UNIX for Dummies Questions & Answers

Multiple field separators in awk? (First a space, then a colon)

How do I deal with extracting a portion of a record when multiple field separators are involved. Let's say I have: Mike Harrington;(555) 555-5555:250:100:175 Christian Dobbins;(555) 555-2358:155:90:201 Susan Dalsass;(555) 555-6279:250:60:50 Archie McNichol;(555) 555-1348:250:100:175 Jody... (3 Replies)
Discussion started by: doubleminus
3 Replies

8. Shell Programming and Scripting

Multiple input field Separators in awk.

I saw a couple of posts here referencing how to handle more than one input field separator in awk. I figured I would share how I (just!) figured out how to turn this line in a logfile: 90000000000000000000010001 name... (4 Replies)
Discussion started by: kinksville
4 Replies

9. Shell Programming and Scripting

I need help counting the fields and field separators using Nawk

I need help counting the fields and field separators using Nawk. I have a file that has multiple lines on it and I need to read the file 1 at a time and then count the fields and field separators and then store those numbers in variables. I then need to delete the first 5 fields and the blank... (3 Replies)
Discussion started by: scrappycc
3 Replies

10. Shell Programming and Scripting

Awk Multiple Field Separators

Hi Guys, I'm tying to split a line similar to this:YO6-2000-30.htm: (3 properties found).......into separate columns, so effectively I need to check for a -, ., :, a tab and a space in the statement. Any help would be appreciated Thanks! (7 Replies)
Discussion started by: Tonka52
7 Replies
Login or Register to Ask a Question