#!/run/current-system/profile/bin/awk -f BEGIN { FS = "[ ]"; # use a single space as field separator and don't trim input ind = 0; # indentation level last = ARGC - 3; # last argument index exitcode = 1; # whether anything has been matched if(last < 0) { # there should be at least one argument after the filename exit 1; } ARGC = 2; # don't read ARGV[2] and onward as files } END { exit exitcode; } $0 != "" { # exit when the indentation block is exited for(i = 0; i < ind; i++) { if(! sub(/^\t/, "")) { exit exitcode; } } } # if on the last argument, interpret it as a key and print the value ind == last && $1 == ARGV[ind + 2] { exitcode = 0; print substr($0, length($1) + 2); } # if not on the last argument, find the string exactly and increment indentation ind != last && $0 == ARGV[ind + 2] { ind++; }