2016-06-05 2 views
1

내 쉘 스크립트는 다음을 수행 101;RevShare-2.txt;TWN;1;제거 문자열 쉘 스크립트에서 두 번째로 발생 될 때까지

레코드 번호는 동적입니다.

편집 : 이것을 달성하기 위해 cut -d '=' -f3|tr -d '",>'을 추가했습니다. 이 작동하지만 20,000 레코드가 들어있는 파일을 처리하는 데 3 초 걸립니다. 매일 500 개의 파일이 있습니다. 이 프로세스의 속도를 높이는 더 좋은 방법이 있습니까?

편집 : 다음은 레코드의 모양입니다. 다른 필드는 error_code 같은 문자열이없는 경우

<record record_no = "1" error_code="101">&apos;&apos;;&apos;25467&apos;;&apos;&apos;;&apos;&apos;;&apos;FIRSTNAME&apos;;&apos;Manikin&apos;;&apos;1234001&apos;;&apos;12484254823&apos;;&apos;&apos;;&apos;&apos;;&apos;&apos;;&apos;103&apos;;&apos;12484254815&apos;;&apos;XXXXX9680&apos;;&apos;OFX&apos;;&apos;0&apos;;&apos;1028000002130745&apos;;&apos;20160422&apos;;&apos;0000&apos;;&apos;25467&apos;;&apos;20160422&apos;;&apos;Y&apos;;&apos;&apos;;&apos;&apos;;&apos;6&apos;;&apos;2&apos;;&apos;1&apos;;&apos;0&apos;;&apos;&apos;;&apos;263&apos;;&apos;99&apos;;&apos;N&apos;;&apos;&apos;;&apos;[email protected]&apos;;&apos;136&apos;;&apos;7, 74, 77, 80, 105, 136, 153&apos;;&apos;0&apos;;&apos;&apos;;&apos;501&apos;;&apos;RevShare-2.txt&apos;;&apos;20160422165920&apos;;&apos;000009680&apos;;&apos;TWN&apos;;&apos;1449587762538&apos;;&apos;1&apos;;&apos;1&apos;;&apos;0&apos;;&apos;&apos;;&apos;Verifier&apos; 
</record> 
+1

같은 뭔가 당신은 완전한 XML '기록'라인을 추가 할 수 있습니다. 그래서 우리는 해결책을 생각할 수 있습니까? – Chet

+1

'grep | sed | cut '은 거의 항상'awk '라고 쓰여있다. 이 경우에는 분명히 사실입니다. –

답변

1
$ awk ' 
BEGIN { FS=OFS=";" } 
/<record/ { 
    gsub(/&apos;/,"") 
    gsub(/.*="|">/,"",$1) 
    print $1, $40, $43, $46 
} 
' /data/error/usage_20160422_165920.lerr.xml 
101;RevShare-2.txt;TWN;1 
+0

굉장! 나는 효율적으로 gsub를 사용하는 방법을 몰랐다. 아마 awk 함수에서 이것을 쓸 수 있고 그것을 사용할 수 있습니다. 요청에 따라 테스트 할 실제 입력을 추가했습니다. – user2570205

+0

그래, 내 대답을 업데이트했습니다. –

+0

@ Edmonton Oh 좋아요. 나는 LQPHQ에서이 게시물을 발견했을 때 그 의견을 남기는 것을 생각한 주제를 많이 알지 못합니다. –

0

, 당신은

| sed 's/.* error_code="[^"]*">/\1/' 

같은 사용자가 다른 명령을 결합 할 수 있습니다 할 수 있습니까?

cut -d ';' -f1,40,43,46 /data/error/usage_20160422_165920.lerr.xml| 
    sed -n '/<record/p;s/&apos;//g;s/.* error_code="[^"]*">/\1/' 
+0

상처에 3 개의 반창고를 붙였을 때 여전히 피가 뚝뚝 거릴 때, 4 번째 반디를 추가하거나 2 개의 반창으로 줄이는 것보다 더 좋은 해결책이 있습니다. 단지 하나의 큰 반다이 (awk)로 대체하십시오. –

+1

@Ed 예, awk이 좋습니다. 나는하지 않았다, 나의 차에서 적당한 응급 처치 장비를 가지고 있지 않았다. –

관련 문제