Mysql 从CSV文件中获取特定输入的B树

Mysql 从CSV文件中获取特定输入的B树,mysql,bash,shell,sed,awk,Mysql,Bash,Shell,Sed,Awk,我有一个包含以下内容的CSV文件 100001,0,top 100002,100001,left 100003,100001,middle 100004,100001,right 100005,100002,left 100006,100002,right 100007,100002,middle 100008,100003,left 100013,100003,right 100011,100003,middle 100014,100003,left 100025,100003,right 1

我有一个包含以下内容的CSV文件

100001,0,top
100002,100001,left
100003,100001,middle
100004,100001,right
100005,100002,left
100006,100002,right
100007,100002,middle
100008,100003,left
100013,100003,right
100011,100003,middle
100014,100003,left
100025,100003,right
100020,100003,middle
假设第一个字段是memberID,第二个是memberof,指的是上面某个记录的同一文件的memberID和第三个位置,即左、中、右 这就像顶部的B树原始数据100001,它有左、中、右分支

我的预期产出是

level1
100001(parent),100002,100004,100003

level2
100002(parent),100005,100006,100007
100004(parent),100014,100025,100029
100003(parent),100009,100013,100011

level4
......
输入文件中可以有100多条记录,因此如果从顶部开始搜索,则可以有5个以上的级别

输出应该是低于输入值的继承人权限成员。如果我给100003,它应该给他下面的成员,而不是上面的成员

我尝试插入mysql并尝试递归地查询它,结果变得更加复杂和耗时

我相信awk和sed命令会有所帮助,但我没有太多的动手和实践经验

我正在寻找一些awk或sed命令或bash或shell脚本来实现这一点

它类似于先进行二元搜索,然后从输入中获取B-树

为了更好地理解,请检查每一个成员的图表,将有左-右-中,但不超过3个成员在直接低于水平

我使用mysql的失败尝试代码1

#!/bin/bash

input=$1;

left='';
middle='';
right='';
level=0
function getchild () {

left=$(mysql -uroot -p"passwd" -Ddbname -s -N -e "select mid from mtree where pid=$1 and pos='left'");
middle=$(mysql -uroot -p"passwd" -Ddbname -s -N -e "select mid from mtree where pid=$1 and pos='middle'");
right=$(mysql -uroot -p"passwd" -Ddbname -s -N -e "select mid from btree where pid=$1 and pos='right'");
#level=$(($level+1));
#return $level;

}

getchild $input;
echo "$input,$left,$middle,$right"
我与grep的失败代码2

#!/bin/bash

input=$1;

left='';
middle='';
right='';
level=0
function getchild () {

left=$(grep ",$1,left" filename);
middle=$(grep ",$1,middle" filename);
right=$(grep ",$1,right" filename);

}

getchild $input;
echo "$input,$left,$middle,$right"
现在,我在琢磨如何才能得到每个左、中、右递归的子级,直到没有任何元素


提前感谢

您可以从以下内容开始:

 awk -F , '{a[$2]=a[$2]==""?$1:a[$2] FS $1}END{for (i in a) print i,"(parent),",a[i]}' infile.csv
结果:

0 (parent), 100001
100001 (parent), 100002,100003,100004
100002 (parent), 100005,100006,100007
100003 (parent), 100008,100013,100011,100014,100025,100020

所以这不是免费的编码服务。我们会在您尝试后帮助您修复脚本,但不会为您从头开始编写。@Barmar:我在DStand,我昨天发布了我的代码,我通过查询mysql尝试了该代码&这个问题被否决了3次,好几个小时都没有答案/bin/bash输入=$1;左=;中=;右=;级别=0函数getchild{left=$mysql-uroot-ppasswd-Ddbname-s-N-e从mtree中选择mid,其中pid=$1和pos='left';midd=$mysql-uroot-ppasswd-Ddbname-s-N-e从mtree中选择mid,其中pid=$1和pos='right';level=$$level+1;返回$level;}getchild$input;echo$input,$left,$middle,$right盯着几个小时递归调用函数,但无法正确调用。请将代码放在问题中,注释中完全无法读取,因为没有格式。开始很好。让我检查它是否对具有更多数据的测试记录有效现在,如果我想获取一些输入值的树,该怎么办比如100003,我想要它的子树和子树,所有你需要的都是提供你拥有的输入文件和期望输出的详细信息。实际上,这个文件对我来说就像是数据库。我想递归调用函数来获取任何输入值,比如说,如果我输入10003,它应该给出我的直接树和后续树数据。