2013-05-22 2 views
0

매우 큰 문서에서 일부 정보를 추출하려고합니다. , I 3 탭으로 구분 된 컬럼패턴 간의 프로세스 라인

  • Title
  • name
  • 사이의 라인 수를 인쇄해야 Title 라인 사이의 각 그룹

    '>Title 1' 
    
    0 200, >name [numbers&letters] 
    
    1 200, >name [numbers&letters] 
    
    2 200, >name [numbers&letters] 
    
    '>Title 2' 
    
    0 200, >name [numbers&letters] 
    
    1 200, >name [numbers&letters] 
    
    ... 
    
    '>Title 600.000' 
    

    : 파일이 패턴을 따른다

  • 그룹의 첫 번째 줄의 두 번째 열의 번호 (첫 번째 줄은 항상 0으로 시작) – 숫자는입니다.

저는 Bash와 awk/sed를 사용하고 있지만이 작업을위한 루프를 정의 할 수는 없습니다. 어떤 아이디어?

+4

예상 출력은 무엇인가? 그것은 awk로 할 수 있지만 정확히 무엇이 필요한지 알지 못하면 불가능합니다. 또한 무엇이든 시도해 본다면 :) – abasu

+0

출력은 열 (탭 구분)에 3 개의 값이있는 행이됩니다. – user2245731

+0

아래의 답변 중 아무 것도 – abasu

답변

2

안된하지만 근접해야합니다 :

awk -F'[ ,>]+' ' 
/^.>/ { 
    if (count != "") { printf "%s %d %d\n", name, number, count } 
    count = 0 
    name = number = "" 
    next 
} 
NF { 
    if (++count == 1) { number = $2; name = $3 } 
} 
END { 
    if (count != "") { printf "%s %d %d\n", name, number, count } 
} 
' file 
+0

감사! 작동하지만 수정이 가능합니다. awk ' /^>/{ if (count! = "") {printf "% s % d % d \ n", 이름, 번호, 개수} count = 0 name = number = "" 다음 } NF { if (++ count == 1) {number = $ 2; name = $ 3} } 끝 { if (count! = "") {printf "% s % d % d \ n", 이름, 번호, 개수} } '$ 1 – user2245731

1
awk '/^.>/{t=$0;next} NF{a[t]++} $1=="0"{b[t]=$2} END{for (i in a) print i,a[i],b[i]}' file 
+0

일 경우, 해당 제목이 유니크 인 경우 저장하지 않아도됩니다 배열에서 'printf'를 사용하여 부분별로 인쇄하거나 한 번에 인쇄 할 수 있습니다 (다음 제목을 얻을 때 마지막 제목의 데이터를 인쇄하여) – abasu