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

1行に1つのファイルを想定します。

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まで上がります。

関連情報