在 Unix 中将文件复制为不同文件名并修改内容的最佳方法是什么?

在 Unix 中将文件复制为不同文件名并修改内容的最佳方法是什么?

这两天我一直在研究 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_DVALID_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 文件,创建三个副本并删除原始文件。

相关内容