2014-06-13 3 views
0

5 번의 반복 루프가있는 스크립트가 있습니다. 각 반복에서 스크립트는 출력 파일에 행을 추가합니다."x"이전 행의 열 번호 합계

#First 
Total: 10 
Sub: 3 
Del: 4 
Total2:13 
#----------# 
#Second: 
Total: 15 
Sub: 7 
Del: 8 
Total2:25 
#----------# 

내가 원하는 무엇 : 출력 파일이 두 번째 반복에서 다음과 같습니다. 총 + 서브 + 델의 합으로, 델과 Total2 사이의 라인 그래서, 내가 무엇을 시도하면이 명령을 넣어하는 것입니다 (아래 참조) "Del"라인이 인쇄 된 후 "Total2"가 인쇄되기 전에 인쇄하십시오.

awk '!/^#/ {s+=$2} END {print s}' file 

첫 번째 반복에만 작동합니다. 내 원하는 출력 :

#First 
Total: 10 
Sub: 3 
Del: 4 
Sum: 17 
Total2:13 
#----------# 
#Second: 
Total: 15 
Sub: 7 
Del: 8 
Sum: 30 
Total2:25 
#----------# 

그래서, 나는 previos 3 개 라인의 두 번째 컬럼의 값을 요약 할 수있는 방법을 찾고 싶어요.

설명해 드리겠습니다. awk 또는 bash 솔루션은 훌륭 할 수 있습니다.

미리 감사드립니다.

답변

1

닫기가되었지만 awk 프로그램이 나머지 파일을 인쇄하지 않습니다.

$ cat script 
/^#/ { s = 0 }    # reset s on lines starting with # 
!/^#/ { s += $2 }    # add to s on lines that *don't* start with # 
/^Total2/ { print "Sum:", s } # print out sum before printing Total2 
{ print $0 }     # print current line 

이 입력 파일에 실행 : 여기에 내가 채찍질 빠른 예입니다

$ awk -f script file 
#First 
Total: 10 
Sub: 3 
Del: 4 
Sum: 17 
Total2:13 
#----------# 
#Second: 
Total: 15 
Sub: 7 
Del: 8 
Sum: 30 
Total2:25 
#----------# 
+0

전체 출력 파일을 만든 후에 실행하면 정상적으로 작동합니다. 내 솔루션은 출력이 생성되는 것과 동시에 합계를 더하고 싶습니다 ... 제 자신을 xD로 이해합니다. 감사! – cucurbit

+0

오, 알겠습니다. 나는 그 질문을 오해 한 것 같습니다. –

0

좋아, 내가 바보 비트 생각합니다. awake 전에 bash "tail"명령을 추가하면 문제가 해결됩니다.

tail -3 prova.txt | awk '!/^#/ {s+=$2} END {print "Sum: "s}' 
+0

찾고있는 출력을 생성 할 수있는 프로그램이 표시되지 않습니다. 그 awk 프로그램은 하나의 숫자 만 출력합니다. –

+0

어쩌면 내가 잘못 설명했을 수도 있습니다. 첫 번째 테이블은 이미 작성한 스크립트에서 생성됩니다. 하지만 합계를 줄 다른 줄을 추가하고 싶었습니다 ... : S. 죄송합니다. 질문을 애매하게 설명하면됩니다. – cucurbit