假设我在名为
/path/RAS
的文件夹下有 CSV 文件列表,每个 CSV 文件将携带有关每个客户的信息。
我们以一个客户档案为例:
Customer_Name,Customer_id,Customer_Address,Customer_PhoneNumber,Customer_Sale
AAAA,A1090,POl,XXXXX,89080
我的预期输出: 我需要将文件重命名为
AAAA.csv
,同样,我需要将文件夹 /path/RAS
中可用的 CSV 文件重命名为相应的 Customer_Name.csv
cat AAAA.csv
Customer_Name,Customer_id,Customer_Address,Customer_PhoneNumber,Customer_Sale
AAAA,A1090,POl,XXXXX,89080
我有一个代码
awk -F, '{print > ($1".csv")}' originalFile.csv
上面的代码假设第一列用于重命名,是否有一种方法可以根据我们案例“Customer_Name”的列名称重命名文件,在我的实际案例场景中,没有大量的列,列的位置将来可能会有所不同,而且我还需要为文件夹中的每个文件循环此功能。
如果您的 CSV 文件是“简单”文件(没有带逗号或换行符等的引号字段),并且它们都只有标题行和数据行,则以下方法可能有效:
awk -F, 'NR==1 {h=$0; for(i=1; i<=NF; i++) if($i == "Customer_Name") break}
NR==2 {print h ORS $0 > ($i ".csv")}' originalFile.csv
如果您的 CSV 文件更复杂,您应该考虑使用 真正的 CSV 工具包,或最新版本的 GNU
awk
及其 CSV 解析功能:只需将 -F,
替换为 --csv
(或等效的 -k
)
)。