이것은 아마도 여러 가지 질문을 하나로 묶은 것 같지만 이것이 나를 막고 있습니다. 빈 줄로 구분된 네 줄의 그룹이 포함된 텍스트 파일이 있습니다. 각 그룹의 첫 번째 줄은 ">" 기호로 시작됩니다. 그룹화의 첫 번째 인스턴스를 제외하고 첫 번째 행이 동일한 모든 그룹화 인스턴스를 삭제하고 싶습니다. 가장 먼저 떠오르는 것은 sed를 사용하는 것인데 좋은 구현 방법이 생각나지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다!
입력하다:
>abc1234.54321
linea1
lineaa1
lineaaa1
>def56789034
linea1
lineaa1
lineaaa1
>abc1234.54321
linea2
lineaa2
lineaaa2
>def56789034
linea2
lineaa2
lineaaa2
예상 출력:
>abc1234.54321
linea1
lineaa1
lineaaa1
>def56789034
linea1
lineaa1
lineaaa1
답변1
뒤에 빈 줄이 추가될 가능성이 마음에 들지 않으면 paragrapgh 모드의 Awk를 사용하면 가까워집니다.
$ awk -vRS= '!seen[$1]++' ORS='\n\n' input
>abc1234.54321
linea1
lineaa1
lineaaa1
>def56789034
linea1
lineaa1
lineaaa1
레코드 구분 기호( RS=
)를 설정 해제하면 Awk는 공백으로 구분된 각 행 세트를 단일 레코드로 처리합니다. 그런 다음 첫 번째 필드의 연관 배열 값을 사용하여 $1
이전에 해당 키가 있는 레코드를 본 적이 있는지 추적합니다. - 그렇지 않은 경우(즉, !seen[$1]
true) 인쇄합니다.