2016-12-20 5 views
0

У меня есть два спискаПетля для замены строки на другой в другом файле

песни1:

A:1 
B:3 
C:1 
D:5 

песни2:

1:blue 
3:green 
5:red 

Как я могу сделать для что-то например:

Желаемая выход (file3):

A:blue 
B:green 
C:blue 
D:red 

А вот мой unworking код ...

#!/system/bin/bash 
list1=$(cat file1) 
list2=$(cat file2) 
for i in "$list1"; do 
num_file1=$(echo $i | cut -d ":" -f 2) 
string_file2=$(cat $list2 | grep "$num_file1" | cut -d ":" -f 2) 
echo -e "$i" | sed "s/$num_file1/$string_file2/" > list3 
done 

Я также попытался sed 's/"$num_file1"/"$string_file2"/' и многие другие, но не каждый раз за то, что я хочу .. Где я сжимаюсь с sed ??

Ps: его на андроид ... и несколько команд запотевания ...

+0

Поместите 'num_file1 = ...' и следуйте строке в цикле. – PeterMmm

+0

@PeterMmm я пробовал, но все еще не работал ... –

+0

sed: unmatched '/' –

ответ

0

Дайте это AWK линии попробовать:

awk -F':' 'NR==FNR{k[$1]=$2;next}{print $1 FS k[$1]}' f2 f1 

Я не проверял код, но должно сработать.

Примечание это предполагает, что все IDX в file1 мы имеем соответствующую запись в file2

+0

i Пробовал, но его не работает –

0

awk решение прекрасно подходит. Используя меньшие команды, вы можете сказать:

sort -t \: -k 2 list1 | join -t \: -1 2 - list2 | cut -d \: -f 2,3 | sort -t \: 
+0

Я забыл сказать itd на андроиде ... и там туман какая-то команда .. И 'join' is часть запотевших команд (как и паста и некоторые другие). –

+0

Вы должны отредактировать исходный вопрос, поскольку это довольно важное упущение. –

Смежные вопросы