2013-11-23 5 views
0

Например у меня есть 2 файлаБаш: слияние и сортировка файлов

first.txt

John 5 
Kate 3 
Bob 1 

Second.txt

Bob 4 
John 3 
Kate 2 

И здесь я понятия не имею, что делать, чтобы создайте третий файл, который будет выглядеть следующим образом:

John 3 5 
Kate 2 3 
Bob 1 4 

Я пытаюсь использовать «awk», «sort», но не могу найти решение. Спасибо за помощь.

+0

Действительно ли первые два файла имеют одинаковые имена в них? – lurker

+1

Команда POSIX ['join'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/join.html) - это классический способ сделать это. Есть другие вопросы, которые задают одно и то же - я знаю, потому что я предоставил некоторые ответы. Возможные дубликаты: [Bash-скрипт для поиска совпадающих строк из нескольких файлов CSV] (http://stackoverflow.com/q/17459789/) и [Что такое самый простой способ присоединиться к столбцам из переменного количества файлов?] (Http : //stackoverflow.com/q/18466662/) и [Bash слияние файлов по столбцам сопоставления) (http://stackoverflow.com/q/14517509/). Скорее всего, будут и другие. –

+0

В этих вопросах просто сливаются линии. Я должен сортировать эти значения. Я попытаюсь найти там ответ для этого, но спасибо – Kysu

ответ

1

Утилита join может быть полезным здесь, но он ожидает, что содержимое файлов будет отсортирован:

$ join <(sort first.txt) <(sort second.txt) 
Bob 1 4 
John 5 3 
Kate 3 2 

Я знаю, что это не совсем так же, как ваш выход образца, но, возможно, достаточно хорошо для вашей цели?

UPDATE

Так что, похоже вы хотите, чтобы отсортировать значения в каждой строке, так что вместо John 5 3 вы хотели бы видеть John 3 5, я думаю. Один из способов сделать это:

join <(sort a) <(sort b) | awk '{ if ($2 < $3) print $0; else print $1, $3, $2 }' 
+0

Мне нужно сортировать значения, а не имена, но спасибо – Kysu

0
#! /bin/bash 

SF="" 
SL="" 
cat f.txt s.txt|sort|while read L; do 
    #echo $L 
    declare -a A=($L) 
    if [ $SF == ${A[0]} ]; then 
     echo $SL ${A[1]} 
    else 
     SF=${A[0]} 
     SL=$L 
    fi 
done 
Смежные вопросы