Awk cheatsheet: Difference between revisions
m (Text replacement - "<source " to "<syntaxhighlight ") |
|||
Line 3: | Line 3: | ||
==Functions== | ==Functions== | ||
===Bytes to human readable=== | ===Bytes to human readable=== | ||
< | <syntaxhighlight lang=awk> | ||
function b2h(value){ | function b2h(value){ | ||
# Bytes to human readable | # Bytes to human readable | ||
Line 17: | Line 17: | ||
===Binary to decimal=== | ===Binary to decimal=== | ||
< | <syntaxhighlight lang=awk> | ||
function b2d(bin){ | function b2d(bin){ | ||
len=length(bin); | len=length(bin); | ||
Line 30: | Line 30: | ||
This is not my code! It is taken from [[http://awk.info/?quicksort here]] maybe slightly modified cannot check, site is down. | This is not my code! It is taken from [[http://awk.info/?quicksort here]] maybe slightly modified cannot check, site is down. | ||
You can call it like this: qsort(array,1,length(array)); | You can call it like this: qsort(array,1,length(array)); | ||
< | <syntaxhighlight lang=awk> | ||
# BEGIN http://awk.info/?quicksort | # BEGIN http://awk.info/?quicksort | ||
function qsort(A, left, right, i, last) { | function qsort(A, left, right, i, last) { | ||
Line 52: | Line 52: | ||
Same for alphanumeric: | Same for alphanumeric: | ||
< | <syntaxhighlight lang=awk> | ||
# BEGIN http://awk.info/?quicksort | # BEGIN http://awk.info/?quicksort | ||
function qsort(A, left, right, i, last) { | function qsort(A, left, right, i, last) { | ||
Line 74: | Line 74: | ||
Test: | Test: | ||
< | <syntaxhighlight lang=awk> | ||
BEGIN { | BEGIN { | ||
string="1524097359810345254"; | string="1524097359810345254"; | ||
Line 137: | Line 137: | ||
Written for beautifying lines like | Written for beautifying lines like | ||
< | <syntaxhighlight lang=mysql> | ||
GRANT SELECT (account_id, user, enable_imap, fk_domain_id, enable_virusscan, max_msg_size, from_authuser_only, id, time_start, changed_by, enable_spamblocker, onhold, time_end, archive, mailbox_quota) ON `mail_db`.`mail_account` TO 'user'@'172.16.16.16' | GRANT SELECT (account_id, user, enable_imap, fk_domain_id, enable_virusscan, max_msg_size, from_authuser_only, id, time_start, changed_by, enable_spamblocker, onhold, time_end, archive, mailbox_quota) ON `mail_db`.`mail_account` TO 'user'@'172.16.16.16' | ||
</source> | </source> | ||
This function: | This function: | ||
< | <syntaxhighlight lang=awk> | ||
function inner_brace_sort (rest, delimiter) { | function inner_brace_sort (rest, delimiter) { | ||
sorted=""; | sorted=""; | ||
Line 161: | Line 161: | ||
</source> | </source> | ||
Sorts the fields inside the braces alphabetically and can be called like this: | Sorts the fields inside the braces alphabetically and can be called like this: | ||
< | <syntaxhighlight lang=awk> | ||
/\(/ { | /\(/ { | ||
print inner_brace_sort($0, ",[ ]*"); | print inner_brace_sort($0, ",[ ]*"); | ||
} | } | ||
</source> | </source> |
Revision as of 20:34, 25 November 2021
Functions
Bytes to human readable
<syntaxhighlight lang=awk> function b2h(value){
# Bytes to human readable unit=1; while(value>=1024){ unit++; value/=1024; } split("B,KB,MB,GB,TB,PB", unit_string, /,/); return sprintf("%.2f%s",value,unit_string[unit]);
} </source>
Binary to decimal
<syntaxhighlight lang=awk> function b2d(bin){
len=length(bin); for(i=1;i<=len;i++){ dec+=substr(bin,i,1)*2^(len-i); } return dec;
} </source>
Quicksort
This is not my code! It is taken from [here] maybe slightly modified cannot check, site is down. You can call it like this: qsort(array,1,length(array)); <syntaxhighlight lang=awk>
function qsort(A, left, right, i, last) {
if (left >= right) return; swap(A, left, left+int((right-left+1)*rand())); last = left; for (i = left+1; i <= right; i++) if (int(A[i]) < int(A[left])) swap(A, ++last, i) swap(A, left, last) qsort(A, left, last-1) qsort(A, last+1, right)
}
- Helper function to swap two elements of an array
function swap(A, i, j, t) {
t = A[i]; A[i] = A[j]; A[j] = t
}
</source>
Same for alphanumeric: <syntaxhighlight lang=awk>
function qsort(A, left, right, i, last) {
if (left >= right) return; swap(A, left, left+int((right-left+1)*rand())); last = left; for (i = left+1; i <= right; i++) if (int(A[i]) < int(A[left])) swap(A, ++last, i) swap(A, left, last) qsort(A, left, last-1) qsort(A, last+1, right)
}
- Helper function to swap two elements of an array
function swap(A, i, j, t) {
t = A[i]; A[i] = A[j]; A[j] = t
}
</source>
Test: <syntaxhighlight lang=awk> BEGIN {
string="1524097359810345254"; split(string,array_i,""); string="ThisIsAQsortExample"; split(string,array_a,"");
}
function qsort_i(A, left, right, i, last) {
if (left >= right) return; swap(A, left, left+int((right-left+1)*rand())); last = left; for (i = left+1; i <= right; i++) if (int(A[i]) < int(A[left])) swap(A, ++last, i) swap(A, left, last) qsort_i(A, left, last-1) qsort_i(A, last+1, right)
} function qsort_a(A, left, right, i, last) {
if (left >= right) return; swap(A, left, left+int((right-left+1)*rand())); last = left; for (i = left+1; i <= right; i++) if (A[i] < A[left]) swap(A, ++last, i) swap(A, left, last) qsort_a(A, left, last-1) qsort_a(A, last+1, right)
}
- Helper function to swap two elements of an array
function swap(A, i, j, t) {
t = A[i]; A[i] = A[j]; A[j] = t
} END {
for(element in array_i) printf array_i[element]; printf " ===qsort==> " qsort_i(array_i,1,length(array_i)); for(element in array_i) printf array_i[element]; print; for(element in array_a) printf array_a[element]; printf " ===qsort==> " qsort_a(array_a,1,length(array_a)); for(element in array_a) printf array_a[element]; print;
}
</source> which outputs:
1524097359810345254 ===qsort==> 0011223344455557899 ThisIsAQsortExample ===qsort==> AEIQTaehilmoprssstx
Sort words inside braces (gawk)
Written for beautifying lines like <syntaxhighlight lang=mysql> GRANT SELECT (account_id, user, enable_imap, fk_domain_id, enable_virusscan, max_msg_size, from_authuser_only, id, time_start, changed_by, enable_spamblocker, onhold, time_end, archive, mailbox_quota) ON `mail_db`.`mail_account` TO 'user'@'172.16.16.16' </source>
This function: <syntaxhighlight lang=awk> function inner_brace_sort (rest, delimiter) {
sorted=""; while( match(rest,/\([^\)]+\)/) ) { sorted=sprintf("%s%s", sorted, substr(rest, 1, RSTART)); inner=substr(rest, RSTART+1, RLENGTH-2); rest=substr(rest, RSTART+RLENGTH-1, length(rest)); split(inner, inner_a, delimiter); inner_l=asort(inner_a, inner_s); for(i=1; i<=inner_l; i++) { sorted=sprintf("%s%s", sorted, inner_s[i]); if(i<inner_l) sorted=sprintf("%s, ", sorted); } sorted=sprintf("%s", sorted); } return sorted""rest;
} </source> Sorts the fields inside the braces alphabetically and can be called like this: <syntaxhighlight lang=awk> /\(/ {
print inner_brace_sort($0, ",[ ]*");
} </source>