2013-11-23 1 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) 명령은이를 수행하는 전형적인 방법입니다. 같은 것을 요구하는 다른 질문이 있습니다. 제가 답변을 제공했기 때문에 알았습니다. 가능한 중복은 다음과 같습니다 : [여러 CSV 파일에서 일치하는 행을 찾는 Bash 스크립트] (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