![awk나 Sed를 사용하여 수행할 수 있나요? 큰 파일을 작은 파일로 분할합니다. 두 마커 사이의 선](https://linux55.com/image/200467/awk%EB%82%98%20Sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%88%98%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F%20%ED%81%B0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9E%91%EC%9D%80%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%B6%84%ED%95%A0%ED%95%A9%EB%8B%88%EB%8B%A4.%20%EB%91%90%20%EB%A7%88%EC%BB%A4%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%EC%84%A0.png)
awk
or 를 사용하여 이와 같은 작업을 수행 할 수 있습니까 sed
? ...또는 perl
OR을 사용해야 합니까 python
(아니면 C++가 가장 편하기 때문에 C++를 사용하는 것 같습니다)?
카테고리와 하위 카테고리의 항목 목록이 포함된 파일이 있다고 가정해 보겠습니다.
* 새 - 참새 - 까치 - 까마귀 - 앵무새 * 포유류 *애완동물 - 개 - 고양이 - 토끼 * 해충 - 쓰레기 팬더 - 스컹크 * 물고기 - 송어 - 청어 - 연어 (...)
이는 새, 포유류 및 물고기(포유류 아래의 두 하위 카테고리를 분할할 필요가 없음)의 세 가지 파일로 분할되어야 하며 한 카테고리와 다음 카테고리(또는 파일 끝) 사이의 콘텐츠를 포함합니다. 또 다른 접근 방식은 첫 번째 범주/파일로 시작하여 두 번째 범주를 파일로 출력한 다음 반복하기 전에 원본 파일에서 자동/수동으로 제거하는 것입니다.
기본적으로 제가 알고 싶은 것은 두 태그 사이(여기서는 두 태그 사이 ) 에 무엇인가를 만들 awk
거나 출력하는 방법입니다.sed
*
답변1
*
카테고리 줄의 첫 번째 문자라고 가정하면
$ awk '/^\*/{close(f); f=$2; next} f{print > f}' file
$ head Birds Mammals Fish
==> Birds <==
- Sparrow
- Magpie
- Crow
- Parrot
==> Mammals <==
* Pets
- Dog
- Cat
- Rabbit
* Pests
- Trash-panda
- Skunk
==> Fish <==
- Trout
- Herring
- Salmon
답변2
csplit 유틸리티는 이 예제에 표시된 대로 컨텍스트에 따라 파일을 분할하는 데 사용됩니다.
csplit -sz yourfile '/^[*]/' '{*}'
for f in xx*
do {
dst=$(head -n 1 -|cut -d' ' -f2)
cat - > "$dst"
} < "$f"
done
head Birds Fish Mammals
==> Birds <==
- Sparrow
- Magpie
- Crow
- Parrot
==> Fish <==
- Trout
- Herring
- Salmon
==> Mammals <==
* Pets
- Dog
- Cat
- Rabbit
* Pests
- Trash-panda
- Skunk