36 lines
836 B
Awk
36 lines
836 B
Awk
|
#!/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++;
|
||
|
}
|
||
|
|