Linux에서는 8개 파일마다 분리

Linux에서는 8개 파일마다 분리

plt_metgrid_try.000001.png 다음과 같은 544개 파일 목록이 있습니다. plt_metgrid_try.000544.png

544개 파일로 구성된 긴 목록에서 8개 파일마다 분리해야 합니다.

예를 들어.

list 1::  plt_metgrid_try.000001.png, 
          plt_metgrid_try.000009.png,
          plt_metgrid_try.000017.png

list 2::  plt_metgrid_try.000002.png,
          plt_metgrid_try.000010.png,
          plt_metgrid_try.000018.png
.
.
.
.
.
.
list 8:: plt_metgrid_try.000008.png,
         plt_metgrid_try.000016.png,
         plt_metgrid_try.000024.png

이번에도 8개의 목록을 만들고 이 긴 목록을 분리해야 합니다.

어떻게 분리하나요?

해결하도록 안내해 드립니다. 미리 감사드립니다.

답변1

루프가 없는 awk변형

awk '{print $0 > "file_"NR%8+1".lst" }' file

GNU의 sed대안

for n in {0..7}; do sed -n "$n~8p" file > "$n.lst"; done

편집하다

아래 댓글을 보면 이것이 원하는 것일 수도 있습니다 ...

ls -d -- *.png | awk '{print $0 > "file_"NR%8+1".lst" }'

답변2

한 줄에 하나의 파일을 가정합니다.

for n in {0..7} ; do awk "(NR%8)==$n {print}" <BigFile.lst >File-$n.lst ; done

답변3

plt_metgrid_try.000001.png에서 plt_metgrid_try.000544.png까지 544개의 파일 이름이 주어지면 중괄호 확장을 사용하여 ksh93, bash 또는 zsh에 8개의 배열을 할당할 수 있습니다.

list1=(plt_metgrid_try.000{001..544..8})
list2=(plt_metgrid_try.000{002..544..8})
list3=(plt_metgrid_try.000{003..544..8})
list4=(plt_metgrid_try.000{004..544..8})
list5=(plt_metgrid_try.000{005..544..8})
list6=(plt_metgrid_try.000{006..544..8})
list7=(plt_metgrid_try.000{007..544..8})
list8=(plt_metgrid_try.000{008..544..8})

중괄호 확장은 일치하지 않는 단순한 텍스트 확장이므로 이 목록의 파일 이름은 존재할 수도 있고 존재하지 않을 수도 있습니다. 여기서 버팀대 확장은 주어진 숫자부터 시작하여 8씩 증가하여 544까지 올라갑니다.

관련 정보