![정규식을 사용하여 파일에서 처음으로 일치하는 고유한 항목을 찾습니다.](https://linux55.com/image/89717/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%B2%98%EC%9D%8C%EC%9C%BC%EB%A1%9C%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EA%B3%A0%EC%9C%A0%ED%95%9C%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EC%B0%BE%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
파일에서 처음으로 일치하는 고유한 항목을 찾고 싶습니다. 아래 예제 데이터에서 각 블록의 첫 번째 발생을 찾고 싶습니다.
Chunk 1
some text
second line of random text
Chunk 2
some text
second line of random text
Chunk 3
some text
second line of random text
Chunk 1
some text
second line of random text
Chunk 3
some text
second line of random text
Chunk 2
some text
second line of random text
청크[1-8]는 일치하는 모든 인스턴스를 반환합니다. 처음에는 각 고유 청크 번호를 나열하고 싶습니다. 정규식은 작동하므로 Notepad++에서 사용할 수 있고 결국 Python 스크립트에 통합할 수 있습니다. 또한 고유한 일치 항목과 각 고유 일치 항목 이후의 "임의의 두 번째 텍스트 줄"을 반환하고 싶습니다.
그래서 내가 보고 싶은 건
Chunk 1 (first occurrence)
second line of random text
Chunk 2 (first occurrence)
second line of random text<br>
Chunk 3 (first occurrence)
second line of random text
답변1
GNU 사용 awk
:
gawk -v 'RS=Chunk [0-9]+\n' -v ORS= '
{$0=lastRT $0}
NR>1 && !seen[$0]++
{lastRT = RT}'
답변2
그리고 perl
. 특별히 읽을 수는 없지만 awk
접근 방식이 훨씬 좋습니다.
perl -ne 'if(/^Chunk [0-9]+$/&&!exists($seen{$_})){$seen{$_}++;chomp;$a=$_;$_=<>;$_=<>;print "$a $_"}'