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})

大括号扩展是一种简单的文本扩展,不匹配,因此这些列表中的文件名可能存在也可能不存在。这里的大括号扩展从给定的数字开始,一直到 544,增量为 8。

相关内容