2012-10-15 3 views
-1

I했습니다 두 파일읽기 및 리눅스에 큰 파일을 조작 효율적으로

파일 1 :

030055 a 
033366 b 

파일 2 :

03005515077 x||03215549849 y||03336678899 z||03005577733 xx||03005583838 yy 

쉘 스크립트 파일 1 개 라인을 읽 필요 (030055 a), 숫자 값 (030055)을 구분하여 파일 2에서 찾습니다. 발견되면 문자 값을 '030055 a'의 'a'로 바꿉니다.

예 :을 File1의 먼저 기록 :이 번호 패턴 일치

03005515077 x와 03005577733 XX와

그냥 X를 대체 03005583838 전년 동기 대비 따르고 있습니다 어디 030055이 파일 2, 레코드와 비교해, A를 XX와 YY가 될 수 있도록

03005515077 a와 03005577733 a와 03005583838 (안된)이 라인을 따라

+1

미안하지만 우리는 당신을 위해 일하지 않습니다. 너 뭐 해봤 니? – m0skit0

+0

'awk' 및/또는'sed' 사용을 고려 했습니까? –

+0

awk를 사용해 보았지만 순차적 인 라인 읽기 소요 시간이 많이 걸립니다. – Ali

답변

1

뭔가;

#!/bin/bash 

while read line 
do 
    COL1 = `cat $line | awk '{print $1}'` 
    COL2 = `cat $line | awk '{print $2}'` 
    sed "s/(${COL1}[0-9]+)[^||]*||/\1 ${COL2}||/g" file_2 > file_2.out 
    mv file_2.out file_2 
done < "file_1" 
+0

'COL1'과'COL2'는 작은 따옴표 안에서 확장되지 않습니다. 또한'cat'과'file_2'의 무의미한 사용은'sed'가 내용을보기 전에 리다이렉션에 의해 파괴 될 것입니다 -'file_2.out'에 저장하고 필요하다면 이름을 바꿉니다. 그렇지 않다면 일반적인 생각은 맞다. – twalberg

+0

@twalberg 당신은 절대적으로 옳습니다. 나는 그걸 아주 빨리 타이핑했습니다. 리다이렉션은 반복마다 동일한 결과 파일을 사용해야하므로 모든 업데이트가 발생하므로 까다로울 수 있습니다. 나는 그것을'''로 빌드하는 것이 좋겠지 만 일치하지 않는 결과는 복사되지 않을 것입니다. – lynks

+0

나를 무시하고, 그 긴 날이었고 내가 말한 대부분이 잘못되었습니다. 나는 찌르다가 더 정확한 답이 도착했을 때 삭제되도록 여기에 남겨 둘 것입니다. – lynks

관련 문제