31 lines
823 B
Text
31 lines
823 B
Text
awk ' # rotate
|
|
# Input line: string (tab) ["b"|"e"|"a"] (tab) number
|
|
# Output several lines:
|
|
# string (tab) ["b"|"e"|"a"] (tab) number
|
|
# rotated string (tab) ["b"|"e"|"a"] (tab) number
|
|
# rotated string (tab) ["b"|"e"|"a"] (tab) number
|
|
# ...
|
|
#
|
|
# In the output strings, tildes are replaced by spaces
|
|
|
|
BEGIN { FS = OFS = "\t" }
|
|
|
|
/ %key / { # if explicit sort.key is provided, do not rotate
|
|
print $0
|
|
next
|
|
}
|
|
|
|
{
|
|
t1 = $1 #t1 will be $1 with tildes changed to spaces
|
|
gsub(/%~/, "QQ5QQ", t1) #hide real tildes
|
|
gsub(/~/, " ", t1) #change tildes to spaces
|
|
gsub(/QQ5QQ/, "%~", t1) #restore real tildes
|
|
print t1, $2, $3
|
|
i = 1
|
|
while ((j = index(substr($1, i+1), " ")) > 0) {
|
|
i += j
|
|
printf("%s, %s\t%s\t%s\n", \
|
|
substr(t1, i+1), substr(t1, 1, i-1), $2, $3)
|
|
}
|
|
}
|
|
' $*
|