command to group records


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting command to group records
# 1  
Old 08-10-2009
command to group records

hi,
i have records like this

supplier,product, persons involved
10,150,ravi@yahoo.com
30,200,ravi@yahoo.com
20,111,payal@gmail.com
40,211,ravi@yahoo.com

i want to write a command which displays values like this
10,30,40,ravi@yahoo.com

for ravi@yahoo.com if there are n number of suppliers all need to be concatenated as shown above.

can any one help me on this
# 2  
Old 08-10-2009
Code:
#!/bin/ksh
# or bash, bsh, ...
# join.sh
prev=""
saveid=""
sort -t , -k 3,3 | while IFS="," read  id num email xstr
do
       [ "$prev" = "" ] && prev="$email"  #1st line
       [ "$prev" = "$email" ] && saveid="$saveid$id," && continue
       # buf out
       echo "$saveid$prev"
       prev="$email"
done
# last buf
echo "$saveid$prev"

Code:
chmod a+rx join.sh
# using ex.
cat file | ./join.sh | ...
./join.sh < file  > file2

# 3  
Old 08-10-2009
Try...
Code:
awk -F"," 'NR>1{arr[$3]=arr[$3]","$1}END {for (i in arr)print arr[i]","i}' yourfile

# 4  
Old 08-10-2009
thanks malcomex999
i tried with the approach given by you
but it is not working
plz find the snapshot of the same

ibm4@raclin13:~> cat testfile.txt
10,150,selvas12@yahoo.com
20,213,selvas12@yahoo.com
30,553,rahim@lycos.com
222,666,redial@dial.com
ibm4@raclin13:~> awk -F"," 'NR>1{arr[$3]=arr[$3]","$1}END {for (i in arr)print arr[i]","}' testfile.txt
,222,
,20,
,30,

--------------------------------------------------

hi kshji
thanks for the response
after creating the script (join.sh)
i executed the same command as below
but it is giving some error

cat file | ./join.sh | ...

can u tell me what is the meaning of ...

i just gave
cat file | ./join.sh
and ./join.sh < file > file2
and what i got was not meeting my requirement


EXpecting your replies
# 5  
Old 08-10-2009
Quote:
Originally Posted by trichyselva
thanks malcomex999
i tried with the approach given by you
but it is not working
plz find the snapshot of the same

ibm4@raclin13:~> cat testfile.txt
10,150,selvas12@yahoo.com
20,213,selvas12@yahoo.com
30,553,rahim@lycos.com
222,666,redial@dial.com
ibm4@raclin13:~> awk -F"," 'NR>1{arr[$3]=arr[$3]","$1}END {for (i in arr)print arr[i]","}' testfile.txt
,222,
,20,
,30,

--------------------------------------------------

hi kshji
thanks for the response
after creating the script (join.sh)
i executed the same command as below
but it is giving some error

cat file | ./join.sh | ...

can u tell me what is the meaning of ...

i just gave
cat file | ./join.sh
and ./join.sh < file > file2
and what i got was not meeting my requirement


EXpecting your replies

that's not what i have posted, cos u have 4got "i" at the end be4 the file.
so please copy exactly what i have posted for u and try....which is...

Code:
awk -F"," 'NR>1{arr[$3]=arr[$3]","$1}END {for (i in arr)print arr[i]","i}' yourfile



---------- Post updated at 03:24 PM ---------- Previous update was at 03:07 PM ----------

I just tested it now and it is working fine except it prints extra comma at the begening so u can add sed to remove that comma as below...

Code:
awk -F"," 'NR>1{arr[$3]=arr[$3]","$1}END {for (i in arr)print arr[i]","i}' yourfile | sed 's/^\,//'

# 6  
Old 08-10-2009
following should be close to what you need:

Code:
#  nawk -F"," '{OFS=",";t[$3]?t[$3]=t[$3]","$1:t[$3]=$1}END{for (i in t){print t[i],i}}' infile
20,payal@gmail.com
10,30,40,ravi@yahoo.com

HTH
# 7  
Old 08-10-2009
Only examples to use, because defination not included input and output (file, cmd, ...).
Script read data from stdin and write data to the stdout. Caller can tell what is stdin and stdout.

From file to the terminal:
Code:
./join.sh < testfile.txt

Output is:
Code:
20,payal@gmail.com
20,30,40,ravi@yahoo.com

If you like to save result then ex. to file:
Code:
./join.sh < testfile.txt > result.txt

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

To group records in the file in UNIX

Hi All, I am using RHEL 6.9. I got a requirement to group the records in a file.The file content as shown below. #### FAILED JOBS IN XXX ##### 1> ABCD failed in the project XXX 2> HJK Job is in compiled state in the project XXX 3> ILKD failed in the project XXX 4> DFG failed in the... (5 Replies)
Discussion started by: ginrkf
5 Replies

2. UNIX for Beginners Questions & Answers

Awk: group multiple fields from different records

Hi, My input looks like that: A|123|qwer A|456|tyui A|456|wsxe B|789|dfgh Using awk, I am trying to get: A|123;456|qwer;tyui;wsxe B|789|dfgh For records with same $1, group all the $2 in a field (without replicates), and all the $3 in a field (without replicates). What I have tried:... (6 Replies)
Discussion started by: beca123456
6 Replies

3. Shell Programming and Scripting

Sorting group of records and loading last record

Hi Everyone, I have below record set. File is fixed widht file 101newjersyus 20150110 101nboston us 20150103 102boston us 20140106 102boston us 20140103 I need to group record based on first 3 letters in our case(101 and 102) and sort last 8 digit in ascending order and print only... (4 Replies)
Discussion started by: patricjemmy6
4 Replies

4. UNIX for Advanced & Expert Users

Group the records based on empno and send mail

Hi All, I have records in a file with name,SSO,openitems,manageremail with | delimited file.Now i want to group the records by SSO and openitems and send email to their manageremail. kiran|1111|draft|aaa@gmail.com guna|2222|reject|bbb@gmail.com kiran|1111|submitter|aaa@gmail.com... (2 Replies)
Discussion started by: kiranparsha
2 Replies

5. UNIX for Dummies Questions & Answers

keeping last record among group of records with common fields (awk)

input: ref.1;rack.1;1 #group1 ref.1;rack.1;2 #group1 ref.1;rack.2;1 #group2 ref.2;rack.3;1 #group3 ref.2;rack.3;2 #group3 ref.2;rack.3;3 #group3 Among records from same group (i.e. with same 1st and 2nd field - separated by ";"), I would need to keep the last record... (5 Replies)
Discussion started by: beca123456
5 Replies

6. Infrastructure Monitoring

Processing records as group - awk

I have a file has following records policy glb id 1233 name Permit ping from "One" to "Second" "Address1" "Any" "ICMP-ANY" permit policy id 999251 service "snmp-udp" exit policy glb id 1234 name Permit telnet from "One" to "Second" "Address2" "Any" "TCP-ANY" permit policy id 1234... (3 Replies)
Discussion started by: baskar
3 Replies

7. Shell Programming and Scripting

how to group records in a file

hi, I have records like this D127@dm.com,127,569,BRAD,25/08/2009 23:59 D127@dm.com,127,569,BRAD,25/08/2009 23:59 D159@dm.com,159,1170,DAVE,25/08/2009 23:59 D159@dm.com,159,1181,HALE,25/08/2009 23:59 D393@dm.com,393,1209,CAPIT,25/08/2009 23:59 D457@dm.com,457,571,NORTT,25/08/2009 23:59... (4 Replies)
Discussion started by: trichyselva
4 Replies

8. Shell Programming and Scripting

KSH to group records in a file and compare it with another file

Hi, I've a file like below: DeptFile.csv DeptID EmpID ------- ------ Dep01 Emp01 Dep01 Emp02 Dep01 Emp03 Dep02 Emp04 Dep02 Emp05 I've another file which has EmpFile.csv EmpID Salary ------ ------ (3 Replies)
Discussion started by: Matrix2682
3 Replies

9. Shell Programming and Scripting

Column sum group by uniq records

Dear All, I want to get help for below case. I have a file like this. saman 1 gihan 2 saman 4 ravi 1 ravi 2 so i want to get the result, saman 5 gihan 2 ravi 3 like this. Pls help me. (17 Replies)
Discussion started by: Nayanajith
17 Replies

10. UNIX for Advanced & Expert Users

find and group records in a file

Hi, I have this file which has 3 columns, District , stores and unit. What I want is all rows belonging to one district to be created separately under each district, the districts may vary every day , the source file may have 3 districts today and may have 160 tomorrow, so what I need is a... (20 Replies)
Discussion started by: thumsup9
20 Replies
Login or Register to Ask a Question