142 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
| # -*- coding: utf-8 mode: awk -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | |
| 
 | |
| function num(s) {
 | |
|   if (s ~ /^[0-9]+$/) return int(s)
 | |
|   else return s
 | |
| }
 | |
| function ord(s,    i) {
 | |
|   s = substr(s, 1, 1)
 | |
|   i = index(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", s)
 | |
|   if (i != 0) i += 32 - 1
 | |
|   return i
 | |
| }
 | |
| function hex(i,    s) {
 | |
|   s = sprintf("%x", i)
 | |
|   if (length(s) < 2) s = "0" s
 | |
|   return s
 | |
| }
 | |
| function qhtml(s) {
 | |
|   gsub(/&/, "\\&", s)
 | |
|   gsub(/"/, "\\"", s)
 | |
|   gsub(/>/, "\\>", s)
 | |
|   gsub(/</, "\\<", s)
 | |
|   return s
 | |
| }
 | |
| function unquote_html(s) {
 | |
|   gsub(/</, "<", s)
 | |
|   gsub(/>/, ">", s)
 | |
|   gsub(/"/, "\"", s)
 | |
|   gsub(/&/, "\\&", s)
 | |
|   return s
 | |
| }
 | |
| function qawk(s) {
 | |
|   gsub(/\\/, "\\\\", s)
 | |
|   gsub(/"/, "\\\"", s)
 | |
|   gsub(/\n/, "\\n", s)
 | |
|   return "\"" s "\""
 | |
| }
 | |
| function qval(s) {
 | |
|   gsub(/'/, "'\\''", s)
 | |
|   return "'" s "'"
 | |
| }
 | |
| function sqval(s) {
 | |
|   return " " qval(s)
 | |
| }
 | |
| function qvals(             i, line) {
 | |
|   line = ""
 | |
|   for (i = 1; i <= NF; i++) {
 | |
|     if (i > 1) line = line " "
 | |
|     line = line qval($i)
 | |
|   }
 | |
|   return line
 | |
| }
 | |
| function sqvals() {
 | |
|   return " " qvals()
 | |
| }
 | |
| function qarr(values, prefix,    i, count, line) {
 | |
|   line = prefix
 | |
|   count = array_len(values)
 | |
|   for (i = 1; i <= count; i++) {
 | |
|     if (i > 1 || line != "") line = line " "
 | |
|     line = line qval(values[i])
 | |
|   }
 | |
|   return line
 | |
| }
 | |
| function qregexp(s) {
 | |
|   gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
 | |
|   return s
 | |
| }
 | |
| function qsubrepl(s) {
 | |
|   gsub(/\\/, "\\\\", s)
 | |
|   gsub(/&/, "\\\\&", s)
 | |
|   return s
 | |
| }
 | |
| function qgrep(s) {
 | |
|   gsub(/[[\\.^$*]/, "\\\\&", s)
 | |
|   return s
 | |
| }
 | |
| function qegrep(s) {
 | |
|   gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
 | |
|   return s
 | |
| }
 | |
| function qsql(s, suffix) {
 | |
|   gsub(/'/, "''", s)
 | |
|   return "'" s "'" (suffix != ""? " " suffix: "")
 | |
| }
 | |
| function cqsql(s, suffix) {
 | |
|   return "," qsql(s, suffix)
 | |
| }
 | |
| function unquote_mysqlcsv(s) {
 | |
|   gsub(/\\n/, "\n", s)
 | |
|   gsub(/\\t/, "\t", s)
 | |
|   gsub(/\\0/, "\0", s)
 | |
|   gsub(/\\\\/, "\\", s)
 | |
|   return s
 | |
| }
 | |
| function sval(s) {
 | |
|   if (s == "") return s
 | |
|   else return " " s
 | |
| }
 | |
| function cval(s, suffix) {
 | |
|   suffix = suffix != ""? " " suffix: ""
 | |
|   if (s == "") return s
 | |
|   else return "," s suffix
 | |
| }
 | |
| 
 | |
| function printto(s, output) {
 | |
|   if (output == "") {
 | |
|     print s
 | |
|   } else if (output ~ /^>>/) {
 | |
|     sub(/^>>/, "", output)
 | |
|     print s >>output
 | |
|   } else if (output ~ /^>/) {
 | |
|     sub(/^>/, "", output)
 | |
|     print s >output
 | |
|   } else if (output ~ /^\|&/) {
 | |
|     sub(/^\|&/, "", output)
 | |
|     print s |&output
 | |
|   } else if (output ~ /^\|/) {
 | |
|     sub(/^\|/, "", output)
 | |
|     print s |output
 | |
|   } else {
 | |
|     print s >output
 | |
|   }
 | |
| }
 | |
| function find_line(input, field, value,              orig, line) {
 | |
|   orig = $0
 | |
|   line = ""
 | |
|   while ((getline <input) > 0) {
 | |
|     if ($field == value) {
 | |
|       line = $0
 | |
|       break
 | |
|     }
 | |
|   }
 | |
|   close(input)
 | |
|   $0 = orig
 | |
|   return line
 | |
| }
 | |
| function merge_line(input, field, key,               line) {
 | |
|   line = find_line(input, field, $key)
 | |
|   if (line != "") $0 = $0 FS line
 | |
| }
 |