2016-12-20 2 views
0

Ich habe zwei ListenSchleife für Zeichenfolge, die von anderen in verschiedenen Datei ersetzen

list1:

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

list2:

1:blue 
3:green 
5:red 

Wie ich etwas tun kann, haben wie:

Wunsch Ausgang (file3):

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

Und hier ist mein Abschaltbetriebsart Code ...

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

Ich habe auch versucht sed 's/"$num_file1"/"$string_file2"/' und viele andere aber nicht alle Zeiten für das, was ich will .. Wo Ich bin mit Sed gewrungen ??

Ps: sein auf Android ... und wenige Befehle vernebelt werden ...

+0

Setzen Sie 'num_file1 = ...' und folgende Zeile in die Schleife. – PeterMmm

+0

@PeterMmm Ich habe versucht, aber immer noch nicht funktioniert ... –

+0

sed: unmatched '/' –

Antwort

0

Geben Sie diese awk Linie einen Versuch:

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

ich nicht den Code testen hätte, aber es sollte arbeiten.

Hinweis dies setzt voraus, dass alle idx in file1 wir entsprechenden Eintrag haben in file2

+0

Ich versuchte, aber es funktioniert nicht –

0

Die awk Lösung völlig in Ordnung ist. Mit weniger Befehlen könnte man sagen:

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

Ich vergesse, auf Android Andd gesagt ... und dort Nebel einige Befehl .. Und 'Join' ist Teil der misted Befehle (wie Paste und einige andere ..) –

+0

Sie sollten Ihre ursprüngliche Frage bearbeiten, da dies eine ziemlich wichtige Unterlassung ist. –

Verwandte Themen