我有两个 csv 文件。两个文件可能具有相同或不同的数据。File2 只有文件 1 中的几列。文件 2 中的某些列可能有不同的标题。例如,文件 2 用名称代替了名字
Username, Identifier,One-time password,Recovery code,First name,Last name,Department,Location
booker12,9012,12se74,rb9012,Rachel,Booker,Sales,Manchester
grey07,2070,04ap67,lg2070,Laura,Grey,Depot,London
johnson81,4081,30no86,cj4081,Craig,Johnson,Depot,London
jenkins46,9346,14ju73,mj9346,Mary,Jenkins,Engineering,Manchester
smith79,5079,09ja61,js5079,Jamie,Smith,Engineering,Manchester
文件 2
Department,First name,Last name,One-time password
Sales,Rachel,Booker,12se74
Depot,Laura,Grey,04ap67
Depot,Craig,Johnson,30no86
Engineering,Mary,Jenkins,14ju73
Engineering,Jamie,Smith,09ja61
问题 1: 我想重新排序 csv 文件 2 中的列,以根据标题匹配 csv 文件 1 中的顺序。
根据文件 1 排序的所需输出标头
One-time password,Name,Last name,Department
12se74,Dash,Bok,Sales
04ap67,Claire,Trans,Accounts
30no86,Shane,Walter,Depot
14ju73,Leon,Jenkins,Engineering
09ja61,Oliver,Den,Engineering
问题 2: 根据标题删除重复项将 File2 列合并到文件 1 例如,如果 First Name 、 Last Name、 Department 列相同,则那些重复项删除那些重复项。其他列可能相同也可能不同。 因此希望实现基于条件的重复记录删除
问题 3: 将文件 2 转换为文件 1 模板按顺序添加缺失的列。最后根据某些标题比较和删除重复的列。例如。如果名字、姓氏和密码相同,则它们是重复的,其他列可能相同或不同。
问题 4: 将特定列从文件 2 复制到文件 1 保留顺序 例如。文件 2 有名称列 将该列替换为文件 1 的名字列
试过:
awk -v FS=, -v OFS=, 'FNR==NR{hash[FNR]=$5; next}{$2 = hash[FNR]}1' file file2
以上答案来自https://unix.stackexchange.com/questions/674038/replace-a-column-value-in-csv-file-from-another-file
以上似乎工作。但它需要将第 numbet 列指定为 $5 和 $2。任何人都可以帮助修改上述命令以指定标题而不是列号
试过了
awk -v FS=, -v OFS=, '{ for (i=1;i<=NF;i++) { if (i=="name") var=$i }; FNR==NR{hash[FNR]=$5; next}{$var = hash[FNR] }' file file2
不工作