0

I have two huge input files:

file1 contains 3 tabulator separated fields:

  • field1: UID
  • field2: username
  • field3: Real Name

Example of file1:

644 u11496 Real name1 640 u1309 Real name2 641 u3007 Real name3 642 u3030 Real name4 643 u3112 Real name5 54 u0365 Real name6 55 u0613 Real name7 56 u1065 Real name8 57 u1550 Real name9 

file2 with many lines each one with 3 tabulator separated fields:

  • field1: Can be ignored for this case
  • field2: Group name
  • field3: Column containing comma-separated UIDs of users

Example of file2:

2 group1 14,730,748,733,746,761,757,766,735,760,747,738,752,737,758,755,734,754,764,334,335,336,337,41,338,339,39,340 6 group2 14 15 group3 14,667,683,713,730,707,748,733,746,761,680,694,757,766,717,735,760,747,704,738,752,737,715,688,681,700,692,758,755,714,734 

I need to add to each user line in file1, 4th column (tab-separated) with comma-separated group names which a particular user is member of.

2
  • for your current example of file2 - there won't be any matches Commented Mar 13, 2018 at 15:59
  • 1
    add expected output for given sample (suggestion: make it fewer lines for file1 and fewer values in 3rd col for file2)... try something yourself and post when that doesn't work.. see backreference.org/2010/02/10/idiomatic-awk for examples of two file processing.. Commented Mar 13, 2018 at 15:59

1 Answer 1

0

The following shell script (I'm using ksh) will create a third file as to your request.

while read U REST do S=" " # initialized with a tabulation G="" grep -E '[ ,]'"$U"'(,|$)' file2.txt | while read X GROUP USRLIST do G="$G$S$GROUP" S="," done echo "$U $REST$G" # tab between $U and $REST done < file1.txt > file3.txt 

with file1.txt as

644 u11496 Real name1 640 u1309 Real name2 641 u3007 Real name3 642 u3030 Real name4 643 u3112 Real name5 54 u0365 Real name6 55 u0613 Real name7 56 u1065 Real name8 57 u1550 Real name9 14 u14 Jules Ceasar 

file2.txt as

2 group1 14,730,748,733,746,761,757,766,735,760,747,738,752,737,758,755,734,754,764,334,335,336,337,41,338,339,39,340 6 group2 14 14 group6 667,683,641 15 group3 14,667,683,713,730,707,748,733,746,761,680,694,757,766,717,735,760,747,704,738,752,737,715,688,681,700,692,758,755,714,734 

you will get file3.txt as

644 u11496 Real name1 640 u1309 Real name2 641 u3007 Real name3 group6 642 u3030 Real name4 643 u3112 Real name5 54 u0365 Real name6 55 u0613 Real name7 56 u1065 Real name8 57 u1550 Real name9 14 u14 Jules Ceasar group1,group2,group3 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.