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