2013-03-06 3 views
1

IP 주소가있는 두 개의 파일이 기본 키로 있습니다. 파일 2에는 정보가 다른 하위 집합 만 있습니다. bash를 사용하여 첫 번째 파일에 두 번째 열을 추가하고 싶습니다.기본 키로 bash 파일을 병합하십시오.

파일 1 :

192.168.1.1;hosta;aabbccddeef0 
192.168.1.2;hostb;aabbccddeef1 
192.168.1.3;hostc;aabbccddeef2 

파일 2 : 나는 파일 2에서 호스트 이름을 액세스 할 수 있기 때문에, 작동하지 않습니다 cat file2 | cut -d\; -f1; do grep -w $addr file1 ...의 요지를 위해와

192.168.1.2;differentHostname; 

내 방식.

아이디어가 있으십니까?

답변

8

join가하는 일입니다 :

$ join -a1 -t';' <(sort file1) <(sort file2)  
192.168.1.1;hosta;aabbccddeef0 
192.168.1.2;hostb,aabbccddeef1;differentHostname; 
192.168.1.3;hostc,aabbccddeef2 

참고 : join가 정렬 된 순서로 파일을 필요로합니다.

당신은 -o 옵션을 사용하여 출력의 순서를 지정할 수 있습니다

$ join -a1 -t';' -o 1.1 1.2 2.2 1.3 <(sort file1) <(sort file2) 
192.168.1.1;hosta;;aabbccddeef0 
192.168.1.2;hostb;differentHostname;aabbccddeef1 
192.168.1.3;hostc;;aabbccddeef2 
+1

그래,이 방법을 – Qian

+1

감사합니다, 그것은을 행한. – Stef

0
awk -F";" -v OFS=";" 'FNR==NR{a[$1]=$2;next}($1 in a){$(NF+1)=a[$1]}1' file2 file1 

테스트 :

> awk -F";" -v OFS=";" 'FNR==NR{a[$1]=$2;next}($1 in a){$(NF+1)=a[$1]}1' temp2 temp 
192.168.1.1;hosta;aabbccddeef0 
192.168.1.2;hostb;aabbccddeef1;differentHostname 
192.168.1.3;hostc;aabbccddeef2 
> 
관련 문제