2015-05-12 12 views
6

Biorąc pod uwagę plik1:Sortowanie wierszy w jednym pliku podane zamówienie w innym pliku

13 a b c d 
5 f a c d 
7 d c g a 
14 a v s d 

i file2:

7 x 
5 c 
14 a 
13 i 

chciałbym uporządkować plik1 rozważa taką samą kolejność pierwszej kolumnie w plik2, tak że wyjście powinno być:

7 d c g a 
5 f a c d 
14 a v s d 
13 a b c d 

Czy da się to zrobić w bash czy powinienem użyć jakąś „wyższą” język jak py Thon?

Odpowiedz

6

Użyj awk, aby wstawić numer wiersza od file2 jako dodatkową kolumnę przed numerem file1. Sortuj wynik według tej kolumny. Następnie usuń tę kolumnę prefiksu:

awk 'FNR == NR { lineno[$1] = NR; next} 
    {print lineno[$1], $0;}' file2 file1 | sort -k 1,1n | cut -d' ' -f2-