【发布时间】:2018-11-23 11:45:56
【问题描述】:
我正在尝试在两个 .csv 文件中映射列值。它是一个高维数据文件,但我只关心在第二个 .csv 文件中映射和添加新字段。
我的 File1 .csv 文件有标签:#Sender ID、#Type; 我的 File2 .csv 文件有标签:#Sender ID、#Label;
我要做的是如果#sender ID(File1) = sender ID(File2),然后在文件 2 中添加一个新列,定义类型。由于发件人 ID 是随机且重复的,因此无法简单地复制粘贴文件 2 中的#type->#Label 列。
我查看了“awk”命令行,但不确定如何继续使用它,以及这是否有助于解决问题。请建议。
File1.csv(输入)
#Sender ID,#Recieve ID, #Noise, #Position, #Type, #velocity
23,value,value,value, 1, value
43,value,value,value, 2, value
12,value,value,value, 1, value
78,value,value,value, 0, value
43,value,value,value, 2, value
File2.csv(输入)
#Sender ID,#Acc,#Angle,#Label
23,value, value, NaN
43,value,value, NaN
12,value,value, NaN
78, value,value,NaN
43, value,value, NaN
File2.csv(预期输出)
#Sender ID,#Acc,#Angle,#Label
23,value, value, 1
43,value, value, 2
12,value, value, 1
78,value, value, 0
43,value, value, 2
原始文件 1 标题:
sender, attackerType, messageID
原始文件 2 标题:
type, rcvTime, sendTime, sender, messageID, pos__001, pos__002, pos__003, pos_noise__001, pos_noise__002, pos_noise__003, noise__001, noise__002, noise__003, spd__001, spd__002, spd__003, spd_noise__001, spd_noise__002, spd_noise__003, RSSI, Label
预期的文件 2 标头应将 #sender 与文件 1 匹配,然后使用相应的 #attackerType 更新 #Label 字段(标签属性最初为空)。
这是我所做的:`awk 'BEGIN {FS=OFS=","}
NR==FNR {a[$1]=$2;下一个} {$4=a[$22]}1' File1.csv File2.csv`
请记住,两个文件的行数不同。
【问题讨论】:
-
awk似乎是完成这项任务的最佳工具。但是,您的问题描述缺少示例输入/输出 -
感谢您回复@karakfa。我已添加示例输入和预期输出文件。希望对您有所帮助。
-
请将文件内容贴在正文中,并用
{}进行格式化 -
刚刚做到了。如果这没有帮助,请告诉我。谢谢。
-
求助的艺术来了。您的示例输入/输出应涵盖您警告的边缘情况。在这里只需设置 output=file1 就可以了。另外,不清楚标题是否是文件的一部分。