이 명령을 사용하여 awk -v RS= '/index/' longfile > dataIwant
다음 구조를 기반으로 데이터 단락을 파일에 저장합니다.dataIwant
longfile
index value count
1 -32.4613 1.00000
2 -20.5946 1.00000
3 -13.3573 1.00000
4 -13.2064 1.00000
5 -13.2064 0.00000
other stuff
index value count
1 -31.4613 1.00000
2 -19.5946 1.00000
3 -12.3573 1.00000
4 -12.2064 1.00000
5 -12.2064 0.00000
still a lot of other stuff
index value count
1 -33.4613 1.00000
2 -21.5946 1.00000
3 -15.3573 1.00000
4 -15.2064 0.00000
5 -15.2064 0.00000
again a lot of other stuff (and so on many times)
테이블 "인덱스, 값, 개수"의 마지막 n(예: 2) 항목만 모두 파일에 저장하는 대신 파일에 저장하는 방법은 무엇입니까?
예상 출력:
index value count
1 -31.4613 1.00000
2 -19.5946 1.00000
3 -12.3573 1.00000
4 -12.2064 1.00000
5 -12.2064 0.00000
index value count
1 -33.4613 1.00000
2 -21.5946 1.00000
3 -15.3573 1.00000
4 -15.2064 0.00000
5 -15.2064 0.00000
답변1
마지막 n개 레코드의 스크롤 버퍼를 유지하고 END에 인쇄하세요.
$ cat tst.awk
BEGIN { RS=""; ORS="\n\n" }
/index/ { recs[(++c)%n] = $0 }
END {
for ( i=1; i<=n; i++ ) {
print recs[(++c)%n]
}
}
$ awk -v n=2 -f tst.awk file
index value count
1 -31.4613 1.00000
2 -19.5946 1.00000
3 -12.3573 1.00000
4 -12.2064 1.00000
5 -12.2064 0.00000
index value count
1 -33.4613 1.00000
2 -21.5946 1.00000
3 -15.3573 1.00000
4 -15.2064 0.00000
5 -15.2064 0.00000
답변2
일치하는 단락을 배열에 저장하고 다음과 같이 블록의 END
마지막 요소를 인쇄합니다 .n
n=3
awk -v n=3 -v RS= '/index/{z[i++]=$0};END{for (j=i-n; j<=i; j++) print z[j]}' in > out