|
1 | 1 | #!/usr/bin/env bash |
2 | 2 |
|
3 | | -# POSIX 7. <http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html> |
| 3 | +# POSIX 7. http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html |
4 | 4 |
|
5 | 5 | # Turing Machine, but use only for *ultra simple* POSIX text table field manipulation: |
6 | 6 | # it only has better golfing on that very limited problem set. |
|
46 | 46 | #CONDITION_N { STATEMENT_N } |
47 | 47 | #END { STATEMENT_END } |
48 | 48 |
|
49 | | - echo $'1 2\n3 4' | awk 'BEGIN{print "b"}1<2{print "l"}1<2{print "l2"; print "l3"}1>2{print "l4"}END{print "e"}' |
| 49 | + printf '1 2\n3 4' | awk 'BEGIN{print "b"}1<2{print "l"}1<2{print "l2"; print "l3"}1>2{print "l4"}END{print "e"}' |
50 | 50 | #$'b\nl\nl2\nl3\nl\nl2\nl3\ne |
51 | 51 |
|
52 | 52 | echo '0.5 0.5' | awk '{print $1+$2}' |
|
63 | 63 | awk 'BEGIN{print "a", 1}' |
64 | 64 | #'a 1' |
65 | 65 | #by default, print does space separation |
66 | | - awk 'BEGIN{print "a"."b"}' |
| 66 | + awk 'BEGIN{print "a" "b"}' |
67 | 67 | #'ab' |
68 | 68 | #string concat |
69 | | - awk '{print}' |
70 | | - #cat |
| 69 | + |
| 70 | + [ "$(echo 'a' | awk '{print}')" = 'a' ] || exit 1 |
71 | 71 |
|
72 | 72 | ## applications |
73 | 73 |
|
|
81 | 81 |
|
82 | 82 | # Same as above, but print only first match: |
83 | 83 |
|
84 | | - [ "$(echo $'1 a\n2 b\n1 c' | awk '$1 == 1 { print $2; exit }')" = a ] || exit 1 |
| 84 | + [ "$(printf '1 a\n2 b\n1 c\n' | awk '$1 == 1 { print $2; exit }')" = 'a' ] || exit 1 |
85 | 85 |
|
86 | 86 | # Same as above, but match EREs: |
87 | 87 |
|
88 | | - [ "$(echo $'1 a\n2 b\n1 c' | awk '$1 ~/^1$/ { print $2; exit }')" = a ] || exit 1 |
| 88 | + [ "$(printf '1 a\n2 b\n1 c\n' | awk '$1 ~/^1$/ { print $2; exit }')" = 'a' ] || exit 1 |
| 89 | + |
| 90 | +## RS |
| 91 | + |
| 92 | + # Record separator. |
| 93 | + |
| 94 | + # `''` is a special value that selects blank lines, i.e. paragraphs: |
| 95 | + # http://unix.stackexchange.com/questions/82944/how-to-grep-for-text-in-a-file-and-display-the-paragraph-that-has-the-text/82958#82958 |
| 96 | + |
| 97 | + [ "$(printf '1 a0\na1\na2\n\nb0\nb1\nb2\n\nc0\nc1\nc2\n' | awk -v RS='' '/b1/')" = "$(printf 'b0\nb1\nb2')" ] || exit 1 |
| 98 | + |
| 99 | +## Subtract adjacent lines |
| 100 | + |
| 101 | + # TODO fails if the first is zero. |
| 102 | + |
| 103 | + #[ "$(printf '0\n1\n3\n6' | awk awk 'p{print $0-p}{p=$0}')" = "$(printf '1\n2\n3')" ] || exit 1 |
| 104 | + |
| 105 | +echo 'ALL ASSERTS PASSED' |
0 commit comments