要解决AWK中的递归树结构问题,可以使用AWK的递归函数和数据结构来实现。下面是一个示例代码:
# 递归函数:打印树结构
function print_tree(node, level) {
# 打印节点
printf("%*s%s\n", level*2, "", node)
# 获取子节点
cmd = "awk -F, '$1 == \"" node "\" {print $2}' data.csv"
while ((cmd | getline child) > 0) {
# 递归调用打印子节点
print_tree(child, level+1)
}
close(cmd)
}
# 从文件中读取数据
BEGIN {
FS = ","
while ((getline < "data.csv") > 0) {
# 根据父节点的信息建立树结构
parent[$2] = $1
}
# 找到根节点并打印整个树结构
for (node in parent) {
if (!(node in parent)) {
print_tree(node, 0)
}
}
}
假设有一个名为"data.csv"的文件,其中包含节点的父节点和节点名称,如下所示:
A,ROOT
B,A
C,A
D,B
E,B
F,D
G,C
H,C
运行以上代码,将会输出以下树结构:
ROOT
A
B
D
F
E
C
G
H
请根据实际需求修改代码中的文件名和数据格式。
上一篇:AWK 打印并为 3 个变量着色
下一篇:AWK 复制行并替换占位符