Home
Man
Search
Today's Posts
Register

BSD, Linux, and UNIX shell scripting Post awk, bash, csh, ksh, perl, php, python, sed, sh, shell scripts, and other shell scripting languages questions here.

Many to many -- mapping

Tags
array scanning awk, awk, shell scripts

Login to Reply

 
Thread Tools Search this Thread
# 1  
Old 08-29-2018
Many to many -- mapping

INPUT

Code:
13333--TEXT1
14444--TEXT2
13333--TEXT3
12233--TEXT5
14444--TEXT5
12233--TEXT1
12222--TEXT5
13333--TEXT09

what I'm looking for is something using awk arrays with below given output.

Code:
14444--TEXT2,TEXT5
13333--TEXT1,TEXT3,TEXT09
12233--TEXT5,TEXT1
12222--TEXT5

# 2  
Old 08-29-2018
Any attempts on your own?
# 3  
Old 08-29-2018
Here the END part is trying to do a scanning on the array of input being built in the action panel of gawk

Code:
gawk '/pmd/ { 
split($1,IP," "); 
x[IP[2]]++; 
y[n++]=IP[2]"--"$2;} END {
for(i in y){
{
{print y[i]}
}
}
}' file

other approach was

Code:
gawk '/pmd/ {
split($1,IP," "); 
x[IP[2]]++; y[IP[2]"--"$2]++;} END {
for(i in x){
 for(j in y){
if(i ~ y){
print i}
}
}
}' file

# 4  
Old 08-29-2018
Code:
awk -F='--'  '
  {
    a[$1]=($1 in a)?a[$1] "," $2:$2
  }
  END {
     for(i in a)
       print i,a[i]
  }' OFS='--' myFile

# 5  
Old 08-29-2018
Is this correct explanation of that specific line ?

Create array named 'a' indexed with first field with conditional value of : if first field exist in array a , set value to that array member, comma and second field, otherwise set the value to second field.
This will effectivley, append second field if array is defined with index of currently processing line, otherwise, create array member with value of second field.
Code:
...
    a[$1]=($1 in a)?a[$1] "," $2:$2
...


Thanks and regards
Peasant.
# 6  
Old 08-29-2018
it's somewhat close. Let me rewrite this short-circuit
Code:
 a[$1]=($1 in a)?a[$1] "," $2:$2

as this:
Code:
if ($1 in a)
   a[$1]=a[$1] "," $2
else
   a[$1]=$2

Hopefully the long-hand will make it easier to understand...
# 7  
Old 08-30-2018
@vgersh99

Thanks for the idea. it works for me as a standard input is concerned...

the problem is that I'm combining the result into this format in AWK's action panel( or action part) and then doing the many to many mapping ( requirement of this thread ) in the END part.

so my code goes like below:

Code:
gawk 'BEGIN {n=0;}
/pmd/ {
split($1,IP," "); 
x[IP[2]]++; 
y[n++]=IP[2]"--"$2;
} END {for(i in x){ 
for(j in y){
if(k ~ i){print i,j}
}
}
}' input-file.




the trick here is that the part before the END section is producing output like

x is the array containing 13333, 12222, 144444, 155555 -- just for refernce


in the array of
Code:
"y"

with
Code:
"n"

as index starting with 0. now when I try to scan the
Code:
13333--TEXT1
12222--TEXT2
12222--TEXT34
13333--TEXT9
14444--TEXT12
15555--TEXT23
14444--TEXT234
13333--TEXT08
13333--TEXT34

what would be the best way to scan the values of
Code:
x

in
Code:
y

from above given values format and then do a many to many mapping as you have done previously.

------ Post updated at 02:41 PM ------

below is how your code is working for me -- giving required ouput

but I need something in a single awk execution..

Code:
gawk '/pmd/ {split($1,IP," "); 
x[IP[2]]++; 
y[n++]=IP[2]"--"$2;} 
END {
for(j in y){ 
print y[j]
}
}'  inputfile |awk -F'--'  '
  {
    a[$1]=($1 in a)?a[$1] "," $2:$2
  }
  END {
     for(i in a)
       print i,a[i]
  }' OFS='--'

------ Post updated at 06:19 PM ------

i eventuall ended up in managing the requirement-- instead of going into the END part, I simply co-joined the parts in action part.

Code:
gawk '/pmd/ {
split($1,IP," ");
 a[IP[2]]=(IP[2] in a)?a[IP[2]] "<br>" $2:$2
  }
  END {
     for(i in a)
       print i,a[i]
  }' OFS='--'  input file

------ Post updated at 06:20 PM ------

thanks @vgersh99
Login to Reply

« Previous Thread | Next Thread »
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Mapping two files goddevil Shell Programming and Scripting 12 11-16-2012 03:23 AM
drive mapping walnutpony123 Red Hat 1 08-09-2012 07:53 PM
Creating unique mapping from multiple mapping gimley Shell Programming and Scripting 5 06-28-2012 02:41 AM
Key Mapping ab52 Red Hat 0 01-25-2011 06:32 AM
Bit Mapping readycpbala Shell Programming and Scripting 5 10-24-2010 09:08 AM
port mapping kallquk IP Networking 1 10-08-2009 02:52 AM
searching and mapping mamatabbsr Shell Programming and Scripting 4 06-19-2009 02:08 AM
kernel mapping... prangin UNIX for Advanced & Expert Users 1 07-11-2008 03:48 PM
LUN mapping user23 UNIX for Dummies Questions & Answers 1 04-18-2008 12:28 PM
nfs mapping problem soliberus SCO 5 11-11-2004 09:49 AM


All times are GMT -4. The time now is 12:09 PM.

Unix & Linux Forums Content Copyright 1993-2018. All Rights Reserved.
UNIX.COM Login
Username:
Password:  
Show Password