Unixでファイルを別のファイル名にコピーして内容を変更する最良の方法は何ですか?

Unixでファイルを別のファイル名にコピーして内容を変更する最良の方法は何ですか?

私は最近Unix Scriptを勉強しています。以前はUnixスクリプトを使ったことがなかったので、突然私のプログラムをサポートするためにUnixスクリプトを作成する必要がありました。

基本的に私は私の場合について次のアドバイスを探しています。

ETLツールの1つを使用してロードする必要があるソースファイル名のリストを含むファイルがあります。

たとえば、私はVALID_FILENAME.csvこのようなものを持っています。

test1_file.csv 
test2_file.csv 
test3_file.csv

各部分ごとにタイトル、詳細、予告編があるので3つの部分にコピーしたいと思います。

私の期待は、3つのファイルにコピーしVALID_FILENAME.csvて名前をVALID_FILENAME_HVALID_FILENAME_Dで指定することですVALID_FILENAME_T

内容も下記のように交換いたします。

VALID FILENAME_H:

test1_file_H
test2_file_H
test3_file_H

VALID FILENAME_D:

test1_file_D
test2_file_D
test3_file_D

VALID FILENAME_T:

test1_file_T
test2_file_T
test3_file_T

私の質問は、cpを使用してファイル名を変更してVALID_FILENAME.csv3つのファイルをさらにコピーできることです。 sedを使用して.csvをH / D / Tに置き換えることも可能ですか?

ETLツールがヘッダー、詳細、およびトレーラーを別々のプロセスとして処理するため、これを3つの部分に分割する必要があるのはなぜですか。

ファイルをコピーし、ファイル名を別の名前に変更し、Unixでファイル内の文字列を変更するための最良の方法についての提案やコメントをありがとう。

ベストアンサー1

cpだけでは、1回の実行で複数のファイルを作成することはできません。

非常にエレガントではありませんが、次のループを使用して目標を達成できます。

for file in *.csv;do for end in _H _D _T ;do pc $file ${file%.csv}$end;done;rm $file;done

デフォルトでは、すべてのcsvファイルを繰り返して3つのコピーを作成し、ソースを削除します。

おすすめ記事