Issue
Team, my situation is like I have to pull paths that are with subdirectorys and exclude printing the parent directory path alone.
so example output
src/services/sam-agent #< should not be printed
src/services/sam-agent/auth
src/services/sam-agent/certs
src/services/sam-agent/server
src/services/jam-controller #< should not be printed
src/services/jam-controller/api
src/services/jam-controller/client
src/services/wam-controller/api #< should not be printed
src/services/wam-controller/api/client
src/services/wam-controller/api/server
expected
src/services/sam-agent/auth
src/services/sam-agent/certs
src/services/sam-agent/server
src/services/jam-controller/api
src/services/jam-controller/client
I got above by below expression not sure what modifications I can make to get above output.
find src/services/ -type f -name 'BUILD.bazel' | sed -r 's|/[^/]+$||' |sort |uniq|grep -e '*-controller'
Solution
This might be what you want:
$ cat file | sort | tac | awk '{sub("/[^/]+$","")} index(prev,$0"/") != 1{print} {prev=$0}'
src/services/wam-controller/api/server
src/services/wam-controller/api/client
src/services/sam-agent/server
src/services/sam-agent/certs
src/services/sam-agent/auth
src/services/jam-controller/client
src/services/jam-controller/api
Replace cat file
with find src/services/ -type f -name 'BUILD.bazel'
to give this input:
$ 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
The above assumes that none of your directory/file names contain newlines.
Answered By - Ed Morton Answer Checked By - Katrina (WPSolving Volunteer)