如何使用 shell 脚本根据文件内的列名称重命名 CSV 文件

问题描述 投票:0回答:1

假设我在名为

/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”的列名称重命名文件,在我的实际案例场景中,没有大量的列,列的位置将来可能会有所不同,而且我还需要为文件夹中的每个文件循环此功能。

shell unix awk sed cat
1个回答
0
投票

如果您的 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
)。

© www.soinside.com 2019 - 2024. All rights reserved.