Добавление значения строки в столбец

На самом деле я новичок в написании сценариев оболочки. предположим, у меня есть 2 столбца, разделенные запятой

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

У меня другой ряд. Значение этой строки может измениться. Как и ниже, в строке есть 5 чисел, разделенных запятой. Он может иметь более 5 номеров (пример: 1,5,3,7,8,9,10,...)

41,42,43,44,45

я хочу добавить значение из строки, как показано ниже

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

это можно сделать?


person Kazi Nymul Haque Kanon    schedule 22.12.2016    source источник


Ответы (2)


вы можете попробовать это;

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

Контрольная работа;

$ ./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
person Mustafa DOGRU    schedule 22.12.2016
comment
Хорошо, хотя вы могли бы избежать бесполезного использования Cat в $(cat file2 | sed 's/,/\n/g'), написав $(sed 's/,/\n/g' file2) напрямую - person Aserre; 22.12.2016
comment
@KaziNymulHaqueKanon, что не работает? Вы получаете неожиданный результат или этот скрипт возвращает пустой результат? Вы случайно не используете #!/bin/sh вместо #!/bin/bash ? - person Aserre; 22.12.2016
comment
OFFER_DELETE_SC_LEVEL,146,41n42n43n44n45 OFFER_DELETE_SC_LEVEL,25,41n42n43n44n45 OFFER_DELETE_SC_LEVEL,18,41n42n43n44n45 OFFER_DELETE_SC_LEVEL,17,41n42n43n44n45 Я получаю такой вывод - person Kazi Nymul Haque Kanon; 22.12.2016
comment
@KaziNymulHaqueKanon, вы уверены, что написали sed 's/,/\n/g' file2 с символом \n (а не только с символом n)? Попробуйте заменить бит sed на $(tr ',' '\n' < row.txt) и сообщите нам, если у вас такой же вывод. - person Aserre; 22.12.2016
comment
@KaziNymulHaqueKanon Хорошо, очевидно, в Solaris символы \n обрабатываются по-другому. Вместо этого вам нужно будет написать $'\n' (дополнительная информация здесь) - person Aserre; 22.12.2016
comment
теперь вывод такой: OFFER_DELETE_SC_LEVEL, 146, OFFER_DELETE_SC_LEVEL, 25, OFFER_DELETE_SC_LEVEL, 18, OFFER_DELETE_SC_LEVEL, 17, - person Kazi Nymul Haque Kanon; 22.12.2016

Не могли бы вы попробовать выполнить следующие действия и дайте мне знать, если это поможет.

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

Я надеюсь, это поможет вам.

person RavinderSingh13    schedule 22.12.2016
comment
У меня это работает нормально, не могли бы вы убедиться, что в ваших файлах нет символов каретки? Также опубликуйте пример ввода и вывода, который вы получили выше, и, что наиболее важно, как вы выполняете команду, пожалуйста, опубликуйте все подробности там же. - person RavinderSingh13; 22.12.2016