2016-12-22 10 views
0

На самом деле я довольно новичок в сценариях оболочки. предположим, что у меня есть 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 

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

ответ

1

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

#!/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 
+1

Приятно, хотя вы можете избежать [бесполезного использования кошки] (https://en.wikipedia.org/wiki/Cat_ (Unix) #Useless_use_of_cat) в '$ (cat file2 | sed 's /,/\ n/g ') 'путем написания' $ (sed' s /,/\ n/g 'file2) 'непосредственно – Aserre

+0

@Aserre; спасибо, я обновил ан. –

+0

не работает :(FYI У меня есть Sun os. –

0

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

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 

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

+0

не помогает, получая пустой вывод :( –

+0

Он отлично работает для меня, не могли бы вы убедиться, что в ваших файлах нет символов каретки? Также разместите образец ввода и вывода, который вы получаете сверху, и, самое главное, как вы выполняя команду, любезно опубликуйте все данные на том же самом. – RavinderSingh13