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까지 올라갑니다.