0

Actually I am pretty new in shell scripting. suppose i have a 2 columns separated by comma

OFFER_DELETE_SC_LEVEL,146
OFFER_DELETE_SC_LEVEL,25
OFFER_DELETE_SC_LEVEL,18
OFFER_DELETE_SC_LEVEL,17
OFFER_DELETE_SC_LEVEL,27

I have another row. This row value may change. Like below the row have 5 numbers separated by comma. It may have more then 5 numbers(example: 1,5,3,7,8,9,10,...)

41,42,43,44,45

i want to add value from the row like below

OFFER_DELETE_SC_LEVEL,146,41
OFFER_DELETE_SC_LEVEL,25,41
OFFER_DELETE_SC_LEVEL,18,41
OFFER_DELETE_SC_LEVEL,17,41
OFFER_DELETE_SC_LEVEL,27,41
OFFER_DELETE_SC_LEVEL,146,42
OFFER_DELETE_SC_LEVEL,25,42
OFFER_DELETE_SC_LEVEL,18,42
OFFER_DELETE_SC_LEVEL,17,42
OFFER_DELETE_SC_LEVEL,27,42
OFFER_DELETE_SC_LEVEL,146,43
OFFER_DELETE_SC_LEVEL,25,44
OFFER_DELETE_SC_LEVEL,18,44
OFFER_DELETE_SC_LEVEL,17,44
OFFER_DELETE_SC_LEVEL,27,44
OFFER_DELETE_SC_LEVEL,146,45
OFFER_DELETE_SC_LEVEL,25,45
OFFER_DELETE_SC_LEVEL,18,45
OFFER_DELETE_SC_LEVEL,17,45
OFFER_DELETE_SC_LEVEL,27,45

can it be done?

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62

2 Answers2

1

you can try this;

#!/bin/bash
 for var in $(sed 's/,/\n/g' file2); do
        awk -v var=$var '{print $0"," var} ' file1
 done

Test;

$ ./test.sh 
OFFER_DELETE_SC_LEVEL,146,41
OFFER_DELETE_SC_LEVEL,25,41
OFFER_DELETE_SC_LEVEL,18,41
OFFER_DELETE_SC_LEVEL,17,41
OFFER_DELETE_SC_LEVEL,27,41
OFFER_DELETE_SC_LEVEL,146,42
OFFER_DELETE_SC_LEVEL,25,42
OFFER_DELETE_SC_LEVEL,18,42
OFFER_DELETE_SC_LEVEL,17,42
OFFER_DELETE_SC_LEVEL,27,42
OFFER_DELETE_SC_LEVEL,146,43
OFFER_DELETE_SC_LEVEL,25,43
OFFER_DELETE_SC_LEVEL,18,43
OFFER_DELETE_SC_LEVEL,17,43
OFFER_DELETE_SC_LEVEL,27,43
OFFER_DELETE_SC_LEVEL,146,44
OFFER_DELETE_SC_LEVEL,25,44
OFFER_DELETE_SC_LEVEL,18,44
OFFER_DELETE_SC_LEVEL,17,44
OFFER_DELETE_SC_LEVEL,27,44
OFFER_DELETE_SC_LEVEL,146,45
OFFER_DELETE_SC_LEVEL,25,45
OFFER_DELETE_SC_LEVEL,18,45
OFFER_DELETE_SC_LEVEL,17,45
OFFER_DELETE_SC_LEVEL,27,45
Mustafa DOGRU
  • 3,994
  • 1
  • 16
  • 24
  • 1
    Nice, though you could avoid a [Useless Use Of Cat](https://en.wikipedia.org/wiki/Cat_(Unix)#Useless_use_of_cat) in `$(cat file2 | sed 's/,/\n/g')` by writting `$(sed 's/,/\n/g' file2)` directly – Aserre Dec 22 '16 at 14:39
  • @KaziNymulHaqueKanon what is not working ? Do you get an unexpected output or does this script returns a blank result ? Are you by nay chance using `#!/bin/sh` instead of `#!/bin/bash` ? – Aserre Dec 22 '16 at 15:04
  • OFFER_DELETE_SC_LEVEL,146,41n42n43n44n45 OFFER_DELETE_SC_LEVEL,25,41n42n43n44n45 OFFER_DELETE_SC_LEVEL,18,41n42n43n44n45 OFFER_DELETE_SC_LEVEL,17,41n42n43n44n45 I am getting output like this – Kazi Nymul Haque Kanon Dec 22 '16 at 15:07
  • @KaziNymulHaqueKanon are you sure you wrote `sed 's/,/\n/g' file2` with a `\n` (and not just a `n` character) ? Try to replace the sed bit by `$(tr ',' '\n' < row.txt)` and tell us if you have the same output – Aserre Dec 22 '16 at 15:20
  • @KaziNymulHaqueKanon Ok, so apparently on Solaris, `\n` characters are handled differently. You'll need to write `$'\n'` instead (more info [here](http://stackoverflow.com/questions/8991275/escaping-newlines-in-sed-replacement-string)) – Aserre Dec 22 '16 at 15:26
  • now the output is like this OFFER_DELETE_SC_LEVEL,146, OFFER_DELETE_SC_LEVEL,25, OFFER_DELETE_SC_LEVEL,18, OFFER_DELETE_SC_LEVEL,17, – Kazi Nymul Haque Kanon Dec 22 '16 at 15:43
0

Could you please try following also and let me know if this helps.

awk 'FNR==NR{A[++num]=$0;next} {for(j=1;j<=NF;j++){for(i=1;i<=num;i++){print A[i]","$j}}}' file1 FS="," file2

I hope this helps you.

RavinderSingh13
  • 130,504
  • 14
  • 57
  • 93
  • It is working fine for me, could you please make sure no carriage characters are there in your files? Also post the sample input and output which you are getting by above and most importantly how you are executing the command, kindly post all details on same. – RavinderSingh13 Dec 22 '16 at 17:40