2013-10-25 4 views
1

$3,$4 = $3,$2의 두 파일이 있습니다.awk가 키 값을 기준으로 두 파일을 일치시키고 병합합니다.

파일 1 :

1211,A2,ittp,1,IPSG,a2,PA,3000,3000 
1311,A4,iztv,1,IPSG,a4,PA,240,250 
1411,B4,iztq,0,IPSG,b4,PA,230,250 

파일 2 :

TP,0,nttp,0.865556,0.866667 
TP,1,ittp,50.7956,50.65 
TP,1,iztv,5.42444,13.8467 
TP,0,iztq,645.194,490.609 

그때

TP,1211,A2,ittp,1,IPSG,a2,PA,3000,3000,0.865556,0.866667 
TP,1311,A4,iztv,1,IPSG,a4,PA,240,250,50.7956,50.65 
TP,1411,B4,iztq,0,IPSG,b4,PA,230,250,5.42444,13.8467  

모두 같은 통합 파일을 인쇄 file1 $3,$4 = file2 $3,$2 경우처럼 이러한 파일을 병합하고 새 파일을 인쇄 할 파일은 CSV 파일입니다.

awk을 사용해 보았지만 원하는 결과를 얻지 못했습니다. 그것은 단지 file1 인쇄 중입니다.

$ awk -F, 'NR==FNR{a[$3,$4]=$3$2;next}{print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 a[$1] }' OFS=, 1.csv 2.csv 
+0

를 파일이 필요 a $ [$ 3, $ 4]에'$ 0'을 저장합니다. 두 번째 파일을 읽을 때 첫 번째 파일에서 일치하는 줄을 얻고 현재 줄과 결합하여 인쇄하려면'[$ 3, $ 2]'를 찾아야합니다. – Barmar

+0

안타깝게도 'join'은 두 필드가 아닌 한 필드의 파일과 만 일치 할 수 있기 때문에 작동하지 않습니다. – Barmar

답변

1
awk -F, 'BEGIN {OFS=",";} 
     NR == FNR {a[$3,$4] = $0;} 
     NR != FNR && a[$3,$2] {print $1, a[$3,$2], $4, $5;}' 1.csv 2.csv 
0

한 가지 방법 awk로 : 첫 번째 파일을 읽는 경우 I1과 I2가 입력되면 에 참여하여

awk 'NR==FNR{a[$4,$3]=$0;next}($2,$3) in a{print $1,a[$2,$3],$4,$5}' FS=, OFS=, f1 f2 
TP,1211,A2,ittp,1,IPSG,a2,PA,3000,3000,50.7956,50.65 
TP,1311,A4,iztv,1,IPSG,a4,PA,240,250,5.42444,13.8467 
TP,1411,B4,iztq,0,IPSG,b4,PA,230,250,645.194,490.609 
0

cat i1.txt | awk -F',' '{print $3 "-" $4 "," $1 "," $2 "," $5 "," $6 "," $7 "," $8 "," $9}' | sort > s1.txt 
cat i2.txt | awk -F',' '{print $3 "-" $2 "," $1 "," $4 "," $5 }' | sort > s2.txt 
join -t',' s1.txt s2.txt | tr '-' ',' > t12.txt 
cat t12.txt | awk -F ',' '{print $10 "," $3 "," $4 "," $1 "," $2 "," $5 "," $6 "," $7 "," $8 "," $9 "," $11 "," $12 }' 
관련 문제