나는 패턴 일치 전후에 5줄을 인쇄하기 위해 Solaris에서 awk를 사용하고 있습니다. 현재 다음 한 줄의 코드가 작업을 수행합니다.
/usr/xpg4/bin/awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=5 a=5 s="ERROR" file
그러나 결과는 만족스럽지 못했습니다. 첫째, 다음과 같은 원치 않는 줄이 포함되어 있습니다.
- 게임 자체와 관련된 대사
- 빈 줄
- (원치 않는) 패턴과 일치하는 라인.
- 제거하다
- 무의미한 말
- 멍청한
또한 각 염기는 대시가 포함된 선으로 구분되어야 합니다.
입력 예:
stupid
remove
keep it
*
MATCH
keep it as well
remove
important
*
MATCH at line 2:
needed
also
this line should be kept
*
MATCH at line 2:
this to save
very important
remove
keep it
*
MATCH
keep it as well
nonsense
another nonsense
예상 출력:
keep it
keep it as well
---
important
needed
also
---
this line should be kept
this to save
very important
---
keep it
keep it as well
우아한 방식으로 구현하는 방법은 무엇입니까?
답변1
아직 예상되는 출력이 명확하지 않지만 시도해 보겠습니다. Solaris에 gnu 유틸리티가 있는 경우 매우 간단한 방법으로 gawk 및 ggrep을 사용할 수 있습니다.
gawk 'NF > 0' fileName |ggrep -C5 pattern
원하지 않는 단어를 필터링하려면 끝에 |ggrep -v somePattern을 추가할 수 있습니다.