团队,我问了这个问题的反面,并在这里得到了回答。与其他类似路径相比,如何排除在 bash 中打印没有子目录路径的行? https://stackoverflow.com/questions/76040169/how-to-exclude-printing-in-bash-a-line-that-has-no-sub-directory-path-compared-t/76041373#76041373
在这个问题上我想做相反的事情。
我想要下面这个的相反。
cat file | sort | tac |awk '{sub("/[^/]+$","")} index(prev,$0"/") != 1{print} {prev=$0}'
where file
实际上代表了a的输出find
命令:
find src/services/ -type f -name 'BUILD.bazel'
所以包含:
$ cat file
src/services/sam-agent/BUILD.bazel
src/services/sam-agent/auth/BUILD.bazel
src/services/sam-agent/certs/BUILD.bazel
src/services/sam-agent/server/BUILD.bazel
src/services/jam-controller/BUILD.bazel
src/services/jam-controller/api/BUILD.bazel
src/services/jam-controller/client/BUILD.bazel
src/services/wam-controller/api/BUILD.bazel
src/services/wam-controller/api/client/BUILD.bazel
src/services/wam-controller/api/server/BUILD.bazel
在上述输入上运行时所需的命令应输出
src/services/sam-agent
src/services/jam-controller
src/services/wam-controller
即预期仅打印父目录而没有子目录:
src/services/sam-agent #< should be printed
src/services/sam-agent/auth
src/services/sam-agent/certs
src/services/sam-agent/server
src/services/jam-controller #< should be printed
src/services/jam-controller/api
src/services/jam-controller/client
src/services/wam-controller/api #< should obe printed
src/services/wam-controller/api/client
src/services/wam-controller/api/server
尝试了答案1并得到了下面的答案。仍然显示子目录,而不仅仅是src/services/rams
cat /tmp/t.log | sort | tac | awk '{if ($0 in seen) print; else {sub("/[^/]+$", ""); seen[$0]}}'
src/services/rams/store/postgres
src/services/rams
样本t.log
src/services/rams
src/services/rams/integration
src/services/rams/keys
src/services/rams/migrations
src/services/rams/mocks
src/services/rams/server
src/services/rams/smoke
src/services/rams/store
src/services/rams/store/postgres
src/services/rams/store/postgres/mocks
src/services/rams/tools/keyrotate
src/services/rams/tools/secretmanager
src/services/rams/vault