mirror of https://github.com/jorgebucaran/fisher
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
828 B
Awk
69 lines
828 B
Awk
function add(k, v) {
|
|
if (seen[k v]++) return
|
|
print k (v == "" ? "" : " "v)
|
|
}
|
|
|
|
function pop() {
|
|
return (size <= 0) ? "_" : stack[size--]
|
|
}
|
|
|
|
function push(k) {
|
|
stack[++size] = k
|
|
}
|
|
|
|
function flush() {
|
|
while (size) {
|
|
add(pop())
|
|
}
|
|
}
|
|
|
|
$0 == "" { next }
|
|
|
|
done {
|
|
add("_" , $1$2$3)
|
|
next
|
|
}
|
|
|
|
$1 == "--" && !$2 {
|
|
done = 1
|
|
next
|
|
}
|
|
|
|
$1 !~ /^-|^--/ {
|
|
add(pop(), $0)
|
|
next
|
|
}
|
|
|
|
size { flush() }
|
|
|
|
$3 {
|
|
for (i = 4; i <= NF; i++)
|
|
$3 = $3" "$i
|
|
}
|
|
|
|
$1 == "--" {
|
|
if ($3 == "")
|
|
push($2)
|
|
else
|
|
add($2, $3)
|
|
}
|
|
|
|
$1 == "-" {
|
|
if ($2 == "") {
|
|
print $1
|
|
next
|
|
} else {
|
|
n = split($2, keys, "")
|
|
}
|
|
|
|
if ($3 == "")
|
|
push(keys[n])
|
|
else
|
|
add(keys[n], $3)
|
|
|
|
for (i = 1; i < n; i++)
|
|
add(keys[i])
|
|
}
|
|
|
|
END { flush() }
|