这两天我一直在研究 Unix Script。由于我以前从未接触过 Unix 脚本,突然我需要创建 Unix 脚本来支持我的程序。
基本上我想为我的案例寻求以下建议。
我有一个包含源文件名列表的文件,我需要使用 ETL 工具之一加载该文件。
例如我有VALID_FILENAME.csv
这样的内容
test1_file.csv
test2_file.csv
test3_file.csv
我想将它们复制为 3 部分,因为每个部分都有标题、详细信息和预告片。
我的期望是我将复制VALID_FILENAME.csv
成 3 个文件并将它们命名为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?
为什么我需要将它们分成 3 个部分,因为我的 ETL 工具程序将在单独的流程中处理 Header、Detail 和 Trailer。
感谢任何有关复制文件的最佳方法的建议或意见,将其重命名为不同的名称并替换 Unix 中文件内的字符串。
答案1
仅 cp 无法一次执行创建多个文件。
虽然不是很优雅,但您可以使用以下循环来实现您的目标:
for file in *.csv;do for end in _H _D _T ;do pc $file ${file%.csv}$end;done;rm $file;done
它基本上只是循环遍历所有 csv 文件,创建三个副本并删除原始文件。