我有以下格式的csv文件:
23:56:00,5,1,7,99,100,101
23:56:30,5,1,7,98,199,191
23:57:00,6,1,6,99,99,98
23:57:30,5,2,6,97,99,199
...
以及以下格式的地图文件:
1:10
2:12
3:30
4:aa
5:16
6:11
7:bb
我要完成的工作是将第一个csv文件中的2,3和4列中的字段替换为它们在映射文件中映射的值。
例如,在上述情况下,我想要的最终输出是这样的:
23:56:00,16,10,bb,99,100,101
23:56:30,16,10,bb,98,199,191
23:57:00,11,10,11,99,99,98
23:57:30,16,12,11,97,99,199
最好的方法是什么?我试图找出一种使用awk / sed的方法,但是我不确定如何访问awk内的多个文件,如果那是最好的方法。由于文件很大,因此会有很多重复,因此我不认为每次都检查映射是正确的方法。
有没有一种方法可以将映射存储到Shell脚本中的哈希表中,然后使用哈希映射进行替换?
尝试:
awk '
BEGIN { FS = OFS = "," }
FNR == NR {
split($0, f, /:/)
map[f[1]] = f[2]
next
}
{
for (i=2; i<=4; i++) {
if ($i in map) { $i = map[$i] }
}
}
{ print }
' mapfile csvfile
它首先读取地图文件,然后将数据保存在关联的数组中,该数组与field进行比较2
,3
并4
从csv
文件中进行比较。结果产生:
23:56:00,16,10,bb,99,100,101
23:56:30,16,10,bb,98,199,191
23:57:00,11,10,11,99,99,98
23:57:30,16,12,11,97,99,199
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句