bash – 打印包依赖关系树
发布时间:2020-12-15 22:13:55 所属栏目:安全 来源:网络整理
导读:使用 this file,我想打印一个 给定单个基础包的包依赖关系树.例如,拿走 Bash包 @ bash# few lines removedrequires: coreutils libintl8 libncursesw10 libreadline7 _update-info-dir cygwin 我想要find-like输出所需 包,部分示例 bashbash coreutilsbash c
使用
this file,我想打印一个
给定单个基础包的包依赖关系树.例如,拿走 Bash包 @ bash # few lines removed requires: coreutils libintl8 libncursesw10 libreadline7 _update-info-dir cygwin 我想要find-like输出所需 bash bash coreutils bash coreutils libattr1 bash coreutils libattr1 libintl8 bash coreutils libattr1 libintl8 libiconv2 bash coreutils libattr1 libintl8 _autorebase bash coreutils libattr1 libintl8 _autorebase rebase bash coreutils libattr1 libintl8 _autorebase rebase dash bash coreutils libattr1 libintl8 _autorebase rebase dash cygwin bash coreutils libattr1 libintl8 _autorebase rebase dash cygwin base-cygwin 我有这个命令,但它没有递归 #!awk -f $1 == "@" { pkg = $2 } $1 == "requires:" { for (i=2; i<=NF; i++) reqs[pkg][i-1] = $i } END { query = "bash" for (pkg in reqs[query]) { print reqs[query][pkg] } } 解决方法
使用Perl并且没有评论:
perl -lne ' $k = $1 if /@s*(S+)/; @r=split(); shift @r; $r{$k} = [@r] if /requires:/; END{ $p = "bash"; @l = ( [$p,0] ); while ($p = pop @l) { next if $d{$p->[0]}++; print " " x $p->[1] . $p->[0]; for $d(@{$r{$p->[0]}}) { push @l,[ $d,$p->[1]+1 ]; } } }' setup.ini Awk版本: awk '/^@ / { split($0,b); k = b[2]; } /^requires: / { a[k] = $0; } END { p[1] = "bash"; d["bash"] = 0; while (length(p)) { key = p[length(p)]; depth = d[key]; delete p[length(p)]; if (!s[key]++) { printf "%*s %sn",depth,"",key; split(a[key],r); delete r[1]; for (req in r) { p[length(p) + 1] = r[req]; d[r[req]] = depth + 1; } } } } ' setup.ini (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |