2015-11-01 3 views
-1

У меня есть файл (f1), содержащий два столбца; f1 выглядит следующим образом:Сортировка файла на основе информации из разных файлов

bob population1 
sam population1 
jen population2 
amy population2 
jim population3 
bob population3 
doc population4 
allison population4 
zoe population5 
karla population5 

В другом файле (f2), я указываю, как я хотел бы людей в f1 быть сортируют в зависимости от их населения; f2 выглядит следующим образом:

population4 
population1 
population2 
population5 
population3 

Ищу следующий результат:

doc population4 
allison population4 
bob population1 
sam population1 
jen population2 
amy population2 
zoe population5 
karla population5 
jim population3 
bob population3 

Может кто-нибудь, пожалуйста, дайте мне советы о том, как достичь этого результата?

+0

Добро пожаловать в Stackoverflow; пожалуйста, расскажите с более подробной информацией о том, чего вы хотите достичь; вам нужен сценарий оболочки (затем пометьте свой вопрос более точными тегами, например «shell» или «script»)? В любом случае, вы должны сказать, что вы уже пробовали, и что не получилось, как вы ожидали. –

ответ

1

Вы можете перебираем строки из f2, извлечь совпадающие строки из f1 для каждого из них:

while read s ; do 
    grep "$s" f1 
done < f2 

Или без петли, некоторые вариации

nl f2 \ 
| sed 's=\([0-9]\+\)\t\(.*\)=s/\2/\1 \2/=' \ 
| sed -f- <(nl f1) \ 
| sort -nk3,3 

т.е. количества линий в обоих файлах замените «populationX» соответствующим номером, затем отсортируйте по номерам.

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