我正在尝试将列值映射到两个.csv文件中。它是一个高维数据文件,但我只关心在第二个.csv文件中映射和添加新字段。
我的File1 .csv文件有标签:#Sender ID,#Type; 我的File2 .csv文件有标签:#Sender ID,#Label;
我想要做的是,如果#sender ID(File1)=发件人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 =一个[$ 21]} 1' File1.csv File2.csv`
请记住,两个文件的行数不同。
答案 0 :(得分:2)
awk
救援!
$ awk 'BEGIN {FS=OFS=","}
NR==FNR {a[$1]=$5; next}
FNR>1 {$4=a[$1]}1' file1 file2
如果您的分隔符周围有不均匀的空格,则可能需要使用分隔符。
如果file2中有额外的键,则将删除值NAN
。为防止这种情况,您可能希望将&& ($1 in a)
添加到FNR>1
条件。