shithub: 9intro

ref: a351bcdccdf5a4273bc8dc3360a48fbb8b8aa9ea
dir: /idx/rotate/

View raw version
#!/bin/rc
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)
	   }
	 }
' $*