Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on awk.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/awk.e>
#           or at <http://angg.twu.net/e/awk.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######




# «.changer.awk»	(to "changer.awk")
# «.ARGV»		(to "ARGV")
# «.ARGC»		(to "ARGC")
# «.NR-and-NF»		(to "NR-and-NF")
# «.printf»		(to "printf")
# «.figlet»		(to "figlet")
# «.getline»		(to "getline")
# «.gawk-docs»		(to "gawk-docs")
# «.awkbookcode»	(to "awkbookcode")
# «.recursive-descent»	(to "recursive-descent")
# «.getting-started»	(to "getting-started")
# «.sub»		(to "sub")
# «.between»		(to "between")
# «.txr»		(to "txr")



# (find-status   "gawk-doc")
# (find-vldifile "gawk-doc.list")
# (find-udfile   "gawk-doc/")

# (find-status "gawk")
# (find-vldifile "gawk.list")
# (find-fline "/usr/doc/gawk/")
# (find-fline "/usr/share/awk/")
# (find-fline "/usr/doc/gawk/examples/data/")
# (find-fline "/usr/doc/gawk/examples/misc/")
# (find-fline "/usr/doc/gawk/examples/network/")
# (find-fline "/usr/doc/gawk/examples/prog/")
# (find-fline "/usr/bin/igawk")
# (find-man "1 gawk")
# (find-man "1 gawk" "Built-in Variables")
# (find-man "1 gawk" "I/O Statements")
# (find-man "1 gawk" "String Functions")

# (find-node "(gawk)Top")
# (find-node "(gawkinet)Top")
# (find-node "(gawk)Getline/Variable")



# (find-status "mawk")
# (find-vldifile "mawk.list")
# (find-fline "/usr/doc/mawk/")
# (find-fline "/usr/doc/mawk/examples/")
# (find-fline "/usr/doc/mawk/examples/deps.awk.gz")
# (find-man "1 mawk")

#*
rm -Rv ~/tmp/awktest/
mkdir  ~/tmp/awktest/
cd     ~/tmp/awktest/

cat > file1 <<'---'
aaa
@beg
  bbb
  ccc
@end
ddd
---

cat > file2 <<'---'
    xxxx
    yyyy
---

#*
# (find-node "(gawk)Running gawk")
# (find-node "(gawk)Action Overview")
cd ~/tmp/awktest/
awk '
  /@beg/ { print "BEG!" }
  /@end/ { print "END!" }
  //
' file1

awk '
  /@beg/ { print "BEG!" }
  /@end/ { print "END!" }
  { print }
' file1

# (find-node "(gawk)Next Statement")
awk '
  /@beg/ { print "BEG!"; next }
  /@end/ { print "END!"; next }
  { print }
' file1

#*
cd ~/tmp/awktest/
awk '
  /@beg/ { print "BEG!"; omit = 1; next }
  /@end/ { print "END!"; omit = 0; next }
  ! omit { print }
' file1

#*
# (find-node "(gawk)Getline/Variable/File")
# (find-node "(gawk)Options" "`--posix'")
# (find-node "(gawk)Options" "`--traditional'")
cd ~/tmp/awktest/
awk '
  /@beg/ { print "BEG!"; omit = 1;
           while (getline line < "file2") print line;
           next
         }
  /@end/ { print "END!"; omit = 0; next }
  ! omit { print }
' file1

#*





#####
#
# changer.awk
# 2002may04
#
#####

# «changer.awk»  (to ".changer.awk")
#*
rm -Rv ~/tmp/awktest/
mkdir  ~/tmp/awktest/
cd     ~/tmp/awktest/
cp -v ~/eev/changer.awk .

# (find-eev "changer.awk")
# (find-eev "rcfiles/.bashrc")

cat > .bashrc <<'---'
aaa
@beg
  bbb
  ccc
@end
ddd
---
awk -v eevblock=$HOME/eev/rcfiles/.bashrc	\
    -f changer.awk				\
       .bashrc

cat > .bashrc <<'---'
aaa
# Beginning of the eev block:
blablabla.
# End of the eev block.
ddd
---
awk -v eevblock=$HOME/eev/rcfiles/.bashrc	\
    -f changer.awk				\
       .bashrc

#*

# (find-node "(gawk)Index")



#*
rm -Rv ~/tmp/awktest/
mkdir  ~/tmp/awktest/
cd     ~/tmp/awktest/
cp -v ~/.bashrc ~/.emacs ~/.zshrc ~/.gdbinit .

# (find-eev "changer.sh")
# (find-eev "changer.awk")
cd ~/eev/
# ./changer.sh rcfiles/.bashrc \
#   ~/tmp/awktest/.bashrc ~/tmp/awktest/.bashrc_pre-eev
# ./changer.sh rcfiles/.bashrc \
#   ~/tmp/awktest/.bashrc ~/tmp/awktest/.bashrc_pre-eev
 
./changer.sh rcfiles/.emacs   ~/tmp/awktest/.emacs
./changer.sh rcfiles/.bashrc  ~/tmp/awktest/.bashrc
./changer.sh rcfiles/.zshrc   ~/tmp/awktest/.zshrc
./changer.sh rcfiles/.gdbinit ~/tmp/awktest/.gdbinit
./changer.sh rcfiles/.cshrc   ~/tmp/awktest/.cshrc

# ~/tmp/awktest/.gdbinit_pre-eev

cd     ~/tmp/awktest/

#*
# (find-fline "~/tmp/awktest/")




####
#
# argv
# 2004mar18
#
####

# «ARGV»  (to ".ARGV")
# «ARGC»  (to ".ARGC")
# (find-gawknode "")
# (find-gawknode "Auto-set" "`ARGC, ARGV'")
# (find-gawknode "Auto-set" "ENVIRON")
# (find-gawknode "Other Arguments")
# (find-gawknode "Auto-set" "`ARGIND #'")
#*
awk 'BEGIN { for (i=0; i<ARGC; i++) print i, ARGV[i] }' arg1 arg2

#*
unset FOO;    gawk 'BEGIN { print ENVIRON["FOO"] }'
FOO=bar       gawk 'BEGIN { print ENVIRON["FOO"] }'
FOO="baz baz" gawk 'BEGIN { print ENVIRON["FOO"] }'

#*
rm -Rv /tmp/awk/
mkdir  /tmp/awk/
cd     /tmp/awk/

echo FOO > foo
echo BAR > bar

awk ' BEGIN { for(i=0;i<ARGC;i++) print i,ARGV[i] }
      { print }
  ' foo bar 

echo input from stdin | \
awk ' BEGIN { for(i=0;i<ARGC;i++) print i,ARGV[i]; ARGC=1 }
      { print }
  ' foo bar

#*




#####
#
# NR-and-NF
# 2021oct12
#
#####

# «NR-and-NF»  (to ".NR-and-NF")
# (find-gawknode "Auto-set" "'NR'" "number of input records 'awk' has processed")
# (find-gawknode "Auto-set" "'NF'" "The number of fields in the current")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
ghc --version
ghc --version | awk '{print NF}'
ghc --version | awk '{print $NF}'
echo a/bb/ccc/ddd | awk -F/ '{print $NF}'
echo a/bb/ccc/ddd | tr / '\n'
echo a/bb/ccc/ddd | tr / '\n' | awk 'NR==3'



#####
#
# printf
# 2021oct12
#
#####

# «printf»  (to ".printf")
# (find-gawknode "Basic Printf")




#####
#
# figlet
# 2021dec17
#
#####

# «figlet»  (to ".figlet")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
echo 'Foo bar' | figlet -f standard | awk '{printf "-- %s\n", $0}'




#####
#
# getline
# 2004oct13
#
#####

# «getline»  (to ".getline")
# (find-node "(gawk)Plain Getline")
# (find-node "(gawk)Getline/Variable/File")
#*
rm -Rv /tmp/awk/
mkdir  /tmp/awk/
cd     /tmp/awk/
cat > myfile <<'%%%'
one
two two

four four four four
%%%

awk 'BEGIN {
  do {
    a = (getline line < "myfile")
    print a, line
  } while (a)
}'

awk 'BEGIN {
  while (getline line < "myfile")
    print line
  print "last line:", line
}'

rm myfile
awk 'BEGIN {
  getline first_line < "myfile"
  while (getline last_line < "myfile") {}
  print "first line:", first_line
  print "last line: ", last_line
}'
#*




#####
#
# gawk docs (on etch)
# 2007may18
#
#####

# «gawk-docs»  (to ".gawk-docs")
# http://www.gnu.org/
# http://www.gnu.org/software/gawk/gawk.html
# http://ftp.gnu.org/gnu/gawk/gawk-3.1.5.tar.bz2
#*
rm -Rv ~/usrc/gawk-3.1.5/
tar -C ~/usrc/ -xvjf \
  $S/http/ftp.gnu.org/gnu/gawk/gawk-3.1.5.tar.bz2
cd     ~/usrc/gawk-3.1.5/

#*
# (code-c-d "gawk" "~/usrc/gawk-3.1.5/" "~/usrc/gawk-3.1.5/doc/gawk")
# (find-gawkfile "")
# (find-gawknode "Top")
# (find-gawknode "Nondecimal-numbers")
# (find-man "bc")
# (find-man "dc")
# (find-node "(libc)Parsing of Integers")
# (find-node "(libc)Line Input")




#####
#
# Recursive descent parser
# 2011nov01
#
#####

# «awkbookcode»  (to ".awkbookcode")
# «recursive-descent»  (to ".recursive-descent")
# (find-books "__comp/__comp.el" "awk")
# http://www.netlib.org/research/awkbookcode/
# http://www.netlib.org/research/awkbookcode/ch1
# http://www.netlib.org/research/awkbookcode/ch2
# http://www.netlib.org/research/awkbookcode/ch3
# http://www.netlib.org/research/awkbookcode/ch4
# http://www.netlib.org/research/awkbookcode/ch5
# http://www.netlib.org/research/awkbookcode/ch6
# http://www.netlib.org/research/awkbookcode/ch7
# http://www.netlib.org/research/awkbookcode/unbundle.awk

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/awkbookcode/
mkdir  /tmp/awkbookcode/
cd     /tmp/awkbookcode/
cat $S/http/www.netlib.org/research/awkbookcode/ch6 \
  | awk -f $S/http/www.netlib.org/research/awkbookcode/unbundle.awk

# (find-fline "/tmp/awkbookcode/")
# (find-fline "/tmp/awkbookcode/awk.parser")





#####
#
# The examples in the "Getting started" section of the manual
# 2019oct03
#
#####

# «getting-started» (to ".getting-started")
# (find-node "(gawk)Getting Started")
# (find-node "(gawk)Very Simple" "NF > 0")
# (find-node "(gawk)Two Rules")
# (find-node "(gawk)More Complex")
# (find-node "(gawk)Regexp")

# (find-gawknode "String Functions" "gsub(REGEXP")
# (find-gawknode "Bracket Expressions")




#####
#
# sub
# 2023may08
#
#####

# «sub»  (to ".sub")
# (find-gawknode "String Functions" "'sub(REGEXP")
# https://unix.stackexchange.com/questions/134212/extract-file-name-from-path-in-awk-program
# https://documentacoes.wordpress.com/2019/01/17/basename-and-dirname-commands-implemented-in-awk/
# https://groups.google.com/g/comp.lang.awk/c/eyqbS7ojRuQ

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
awk '
  function basename(file) {
    sub(".*/", "", file)
    return file
  }
  {print FILENAME, basename(FILENAME)}
' /path/to/file

awk '
  function basename(file, a, n) {
    n = split(file, a, "/")
    return a[n]
  }
  {print FILENAME, basename(FILENAME)}
' /path/to/file




#####
#
# print everything between certain delimiter lines
# 2024apr28
#
#####

# «between»  (to ".between")
# (find-es "pygments" "fancyvrb")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
seq 1 20 | gawk '
  $1 == "4" { out = 1 }
  out == 1  { print }
  $1 == "8" { out = 0 }
'




#####
#
# txr
# 2021feb04
#
#####

# «txr»  (to ".txr")
# https://nongnu.org/txr/
# https://nongnu.org/txr/rosetta-solutions.html
# https://nongnu.org/txr/txr-pattern-language.html







http://www.cs.nott.ac.uk/~txa/g51mal/notes-6x.pdf




http://www.wra1th.plus.com/awk/awkfri.txt
http://www.mailsend-online.com/blog/along-came-awk.html

http://books.cat-v.org/computer-science/awk-programming-language/The_AWK_Programming_Language.pdf

https://jherrlin.github.io/posts/learn-awk/

https://news.ycombinator.com/item?id=13451454 The Awk Programming Language (1988) [pdf] (archive.org)

https://news.ycombinator.com/item?id=29528439 Cheating at a company group activity using Unix tools (medium.com/fundbox-engineering)
https://news.ycombinator.com/item?id=32569477 Unix legend, who owes us nothing, keeps fixing foundational Awk code (arstechnica.com)

https://news.ycombinator.com/item?id=32969238 What does $0=$2 in awk do? (kau.sh) - learning resources
https://maximullaris.com/goawk_cover.html
https://news.ycombinator.com/item?id=34393085 Awk: Power and Promise of a 40 yr old language (2021) (fosslife.org)
https://github.com/TheMozg/awk-raycaster
https://news.ycombinator.com/item?id=34438560 The State of the Awk (2020) (lwn.net)
https://news.ycombinator.com/item?id=34442528 A first person shooter in 571 lines of GNU Awk (2016) (github.com/themozg) ***
https://github.com/geary/awk/blob/master/LJPII.AWK
https://stackoverflow.com/questions/45420535/whats-the-most-robust-way-to-efficiently-parse-csv-using-awk
https://news.ycombinator.com/item?id=34280281 Learn to Process Text in Linux Using Grep, Sed, and Awk (linode.com)
https://news.ycombinator.com/item?id=33936366 Haskell, Ada, C++, Awk: An Experiment in Prototyping Productivity (1994) [pdf] (yale.edu)
https://news.ycombinator.com/item?id=32534173 Brian Kernighan adds Unicode support to Awk (github.com/onetrueawk) - groff / troff
https://irreal.org/blog/?p=10746 Brailsford & Kernighan on AWK
https://c2.com/doc/expense/ Expense Calculator - Ward Cunningham - awk
https://maximullaris.com/awk.html A fascination of Awk
https://maximullaris.com/awk_tech_notes.html
https://news.ycombinator.com/item?id=35339955 Awk Technical Notes (maximullaris.com)
https://maximullaris.com/bytebeat_gawk.html
https://news.ycombinator.com/item?id=36389755 Fhtagn – A tiny CLI programs tester written in Awk (maximullaris.com)
https://awk.dev/
https://news.ycombinator.com/item?id=37290356 CLI text processing with GNU awk (learnbyexample.github.io)
https://benhoyt.com/writings/awk-make/
https://backreference.org/2010/02/10/idiomatic-awk/





#  Local Variables:
#  coding:               utf-8-unix
#  End: