ファイル名の文字列を変更して複数のファイルの名前を変更するには?

ファイル名の文字列を変更して複数のファイルの名前を変更するには?

デフォルトでは、ファイルを8つのファイルに分割しました。

DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat  #Original File

次のファイル名を持つ8つの新しいファイルがあります。

DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.aa
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ab
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ac
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ad
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ae
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.af
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ag
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ah

このファイルの名前を次に変更したいと思います。

DA_TRP_TOTAL-SHIPPED_v1_DNH_1_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_3_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_4_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_5_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_6_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_7_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_8_8_20170502094536.dat

Unixシェルスクリプトでこれをどのように実行できますか?

答え1

多数のファイル名を変更するための推奨ツールはですrename。これで作業が完了します。

rename -n 'our $i++; s/_DNH_\K\d+_\d+(.*)\..*/${i}_8$1/' DA*.dat.*

答え2

唾を吐くのに適したツールを選択することから始めることができます。

split -a 1 --numeric-suffixes=1 -n 8 myfile myFile_from_8_

これは、(1-8)myFileで始まる名前の8つのセクションに分けられます。myFile_from_8_NN

または、次のようにコマンドを使用して、awk各パーティションファイルにXレコードを使用してパーティションをシミュレートすることもできます(例では、X=100ファイルあたり100レコードを意味します)。

awk 'NR%100==1{ file=sprintf("myFile_from_8_%d",((++c)) )} {print >file}' myFile

関連情報