2014-11-12 1 views
0

이 문자열이 file2에 있으면 file1의 키에 별표를 추가하고 싶습니다.복수 교체 awk 스크립트

감사합니다, 베르나르도

#file1 
HPNK_00080 HPNK_00080 HPNK_04889 HAPS_1149 HAPS_1027 HAPS_0842 HPNK_04769 HAPS_1077 HPNK_10396 HPNK_04984 HPSD74_1027 
HPNK_00090 HPNK_00090 HS308_01445 HAPS_0623 HAPS_0558 HS321_01221 
HPNK_00277 HS312_01685 HS308_01448 HS306_01459 HPNK_00277 HS313_01643 HS310_01701 HS317_01870 

#file2 
HPNK_00080 
HPNK_00090 
HPNK_00210 

#desired output 
HPNK_00080* HPNK_00080 HPNK_04889 HAPS_1149 HAPS_1027 HAPS_0842 HPNK_04769 HAPS_1077 HPNK_10396 HPNK_04984 HPSD74_1027 
HPNK_00090* HPNK_00090 HS308_01445 HAPS_0623 HAPS_0558 HS321_01221 
HPNK_00277 HS312_01685 HS308_01448 HS306_01459 HPNK_00277 HS313_01643 HS310_01701 HS317_01870 

내가 시도 :

awk ' 
BEGIN { FS=OFS="\t" } 
NR==FNR { map[$1] = $2; next } 
{ 
    for (key in map) 
     if ($0 = key) 
      $0 = $0"*" 
    print 
} 
+0

가능한 중복 [AWK와 파일을 비교] (http://stackoverflow.com/questions/15065818/compare-files-with-awk을 할 수있는 고유 한) –

+0

그리고 무엇을 시도 했습니까? – SMA

답변

1

이것은 당신이 가지고있는 가까운 거리에 있습니다.

awk 'NR==FNR{key[$1]++;next} 
    NR!=FNR{if ($1 in key) $1 = $1 "*"; print}' file2 file1 

주요 차이점

file2 독서에 존재 $2을 참조하지 않는 것으로하고, 그것을 읽는 동안 키가 있는지 대신 루프 $1$0의 직접적인 조회를 사용 file1. 파일 1에서 키를 가정

+0

+1 젠장, 너 럭키 루크보다 빨리 쏜거야! =) –

+0

당신은'NR! = FNR'을 필요로하지 않습니다. –

+0

@Jidder : 아니요,'NR! = FNR'은 필요 없지만 대칭을 선호합니다. 나는'NR! = FNR'도 거기에 있다는 것을 전제로'next '없이 할 수 있습니다. 나는 여전히 선명도와 대칭성을 선호한다. –

1

당신은 또한의

awk '{$1 in key&&$1=$1"*";key[$1]}ARGIND==2' file2 file1