我在TSV文件中进行了网络扫描,其中包含的格式类似于以下示例
source IP target IP source port target port
192.168.84.3 192.189.42.52 5868 1214
192.168.42.52 192.189.42.19 1214 5968
192.168.4.3 192.189.42.52 60680 22
....
192.189.42.52 192.168.4.3 22 61969
有没有一种简单的方法可以使用arangoimp将其导入到(预先创建的)边缘集合networkdata中?
答案 0 :(得分:2)
您可以组合the TSV importer,如果它不会导致转换IP失败(在ArangoDB 3.0中修复),那么您需要更多转换逻辑才能获得有效的CSV。在导入过程中,我们会使用ede attribute conversion option将前两列转换为有效的_from
和_to
属性。
您不应该在其中指定包含空格的列主题,它应该是制表符或列数恒定。我们需要在主题行中指定_from
和_to
字段。
为了使其正常工作,您可以通过sed
管理上述内容,以获取有效的CSV和正确的列名,如下所示:
cat /tmp/test.tsv | \
sed -e "s;source IP;_from;g;" \
-e "s;target IP;_to;" \
-e "s; port;Port;g" \
-e 's; *;",";g' \
-e 's;^;";' \
-e 's;$;";' | \
arangoimp --file - \
--type csv \
--from-collection-prefix sourceHosts \
--to-collection-prefix targetHosts \
--collection "ipEdges" \
--create-collection true \
--create-collection-type edge
使用这些正则表达式的sed将创建一个类似的中间表示:
"_from","_to","sourcePort","targetPort"
"192.168.84.3","192.189.42.52","5868","1214"
生成的边缘将如下所示:
{
"_key" : "21056",
"_id" : "ipEdges/21056",
"_from" : "sourceHosts/192.168.84.3",
"_to" : "targetHosts/192.189.42.52",
"_rev" : "21056",
"sourcePort" : "5868",
"targetPort" : "1214"
}