2015-07-17 2 views
3

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

a b c d 
e f h 
n o p q 
i j k 
l m 

и другой file2

3 
1 
0 
1 
2 

Я хотел бы отсортировать file1 в порядке, указанном в file2. Вывод должен быть:

n o p q 
e f h 
i j k 
l m 
a b c d 

В принципе, как я могу добавить file2 перед file1 как столбец префикса и сортировки по этому столбцу, затем удалить столбец префикс?

Ответ here - очень близкое совпадение, но точно не отвечает на мой вопрос.

+0

Следует отметить, что файл 2 должны быть упорядочены по возрастанию, и этот файл 1 следует использовать один и тот же порядок. Я должен был прочитать другой вопрос, чтобы понять, как вы получаете этот результат. – maja

ответ

4

paste ваш друг:

paste f2 f1 | sort | cut -d$'\t' -f2- 

На этапах:

$ paste f2 f1  # join files 
3 a b c d 
1 e f h 
0 n o p q 
1 i j k 
2 l m 
$ paste f2 f1 | sort # sort them 
0 n o p q 
1 e f h 
1 i j k 
2 l m 
3 a b c d 
$ paste f2 f1 | sort | cut -d$'\t' -f2- # remove 1st column 
n o p q 
e f h 
i j k 
l m 
a b c d 
+0

Отлично, спасибо! Что произойдет, если у меня есть 2 строки в виде заголовка в файле1? (нет заголовков в файле2) Как я могу игнорировать их в пасте/сортировке? – kami

+1

Вы можете сказать 'paste f2 <(tail -n +3 f1)' для получения из 3-й строки в 'file1'. – fedorqui

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