私は最近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_H
、VALID_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.csv
3つのファイルをさらにコピーできることです。 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つのコピーを作成し、ソースを削除します。