2016-10-03 2 views
-2

안녕하세요 저는 많은 양의 데이터를 다루는 프로젝트를 진행하고 있습니다. 키 값 쌍이있는 약 2GB의 텍스트 파일이 있으며 각 키에는 여러 값이 있습니다. 특정 기능을 테스트하기위한 키가 필요하므로 다른 파일의 모든 키를 추출해야합니다.텍스트 파일에서 특정 패턴의 정보를 추출하는 스크립트

파일의 형식은 다음과 같습니다

:k: k1 :v: {XYZ:{id:"k1",score:0e0,tags:null},ABC:[{XYZ:{id:"k1",score:0e0,tags:null},PQR:[{id:"ID1",score:71.85e0,tags:[{color:"DARK"},{Type:"S1"},{color:"BLACK"}]},MetaData:{RuleId:"R3",Score:66.26327129015809e0,Quality:"GOOD"}},{XYZ:{id:"k1",score:0e0,tags:null},PQR:[..(same as above format)..],MetaData:{RuleId:"R3",Score:65.8234565409752e0,Quality:"GOOD"}} :: 

//same pattern repeats with different keys, and a new line 

내가 검색 할 때 "K :"CTRL + F를 사용하여 파일에서,이 키는 강조 얻을. 그래서 이런 종류의 패턴은 파일의 시작 부분을 제외하고는 어디에도 없다고 생각합니다.

이와 같이 수천 개의 키가 있습니다.

그리고이 모든 키 (k1, k2)를 추출하여 별도의 파일로 테스트 해 보겠습니다.

k :에 대한 여러 줄이 있으며 별도의 파일로 구분해야합니다 (k1, k2, ..). 어떻게해야합니까?

파이썬 또한 나에게 좋습니다. 파이썬에서 정규식을 사용하거나 "sed"쉘 명령을 사용할 수 있습니다. 열쇠를 추출하는 데 이걸 어떻게 사용할 수 있는지 좀 도와주세요.

누군가 나를 위해 쉘/파이썬 스크립트를 작성하는 데 도움을 줄 수 있습니까? 나는 그 사소한 일을 알고 있지만, 나는 이런 모든 종류의 데이터 처리에 초보자입니다.

또한 데이터가 매우 크기 때문에 런타임 최적화에 중점을 둡니다.

+0

나는 그 것을 매우 사소한 것으로 부르지 않을 것입니다. 파일의 실제 예제를 제공 할 수 있습니까 ('...'제외) –

+0

나는 게시물을 업데이트했습니다! 알고 싶은 다른 것이 있으면 알려주세요! – user2621826

+0

그래서 파일의 각 "첫 단어"(: k :)에 대해 별도의 파일을 만들고 싶습니까? 그리고': k :'에 여러 줄이 있습니까? 그렇다면 별도의 파일에 모든': k :'레코드가 포함되기를 원 하나, 첫 번째, 마지막 또는 ??? . (귀하의 요구 사항이 명확하지 않습니다). 행운을 빕니다. – shellter

답변

0

쉽게 (1 개 패스) 할 수

:k: k1 :v: {XYZ:{id: 
:k2: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
:k3: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 

같은 파일을 가정하고 따라 다음과 같은 출력

$ cat k 
:k: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
:k: k1 :v: {XYZ:{id: 
$ cat k2 
:k2: k1 :v: {XYZ:{id: 
$ cat k3 
:k3: k1 :v: {XYZ:{id: 

을 제공없이 메모리 제한

awk '{fName=$1; gsub(/:/,"",fName); print >> fName ; close(fName)}' inFile 

와 당신이 가지고있는 열쇠는 어떻게 되나요? close(fName)이 필요하지 않을 수도 있습니다. 그러나 t ime가 열린 파일의 한도가 무엇인지 테스트하면 프로세스를 안전하게 수행 할 수 있습니다.

IHTH

관련 문제