🖥️gawk

➡️This is a command-line reference manual for commands and command combinations that you don’t use often enough to remember it. This cheatsheet explains the gawk command with important options and switches using examples.

▁ ▂ ▃ ▄ ꧁ 🔴☠ COMMANDLINE-KUNGFU WITH CHEATSHEETS ☠🔴꧂▅ ▃ ▂ ▁

#   ██████╗  █████╗ ██╗    ██╗██╗  ██╗
#  ██╔════╝ ██╔══██╗██║    ██║██║ ██╔╝
#  ██║  ███╗███████║██║ █╗ ██║█████╔╝ 
#  ██║   ██║██╔══██║██║███╗██║██╔═██╗ 
#  ╚██████╔╝██║  ██║╚███╔███╔╝██║  ██╗
#   ╚═════╝ ╚═╝  ╚═╝ ╚══╝╚══╝ ╚═╝  ╚═╝

# Strings bearbeiten mit (g)awk
#-----------------------------------------------------------------------///
# In Skripten muss ich gelegentlich Ausgaben von Befehlen formatieren oder sonstwie bearbeiten, um sie z.B. als Mailtext eines Cronjobs zu verwenden.

uname -n | gawk '{print toupper($0)}'
# Das gibt den Hostnamen in Großbuchstaben aus.

# Natürlich geht auch das Umwandeln in Kleinbuchstaben:
echo ASDFGH | gawk '{print tolower($0)}' # Ergebnis: asdfgh

# Vielleicht will ich aber einfach nur wissen, wie lang eine Variable (ein String) ist.
echo "dasisteinlangerstring" | gawk '{print length($0)}' # Ergebnis: 21

# Gelegentlich bräuchte ich eine hexadezimale Zahl als dezimale.
echo 0xAF5D1 | gawk '{print strtonum($0)}' # Ergebnis: 718289
# Wichtig bei strtonum ist, dass es Großbuchstaben sein müssen. Das kann ich ja mit toupper zuvor noch machen.

# ...Das ist ja recht schön, aber wie kann ich eine Shellvariable an gawk übergeben?
String=23halloo1asdfasdf; gawk 'BEGIN {print substr("'"${String}"'",3,5)}' # Ergebnis: hallo

# Wenn wir schon bei substring sind, ist der Weg zu split nicht weit:
String=vorneundhinten; echo | gawk '{split("'"${String}"'",arr,"und"); print arr[1]}' # Ergebnis: vorne
# Das leere "echo" bewirkt das selbe wie "BEGIN" Gawk nimmt es mit Arrays zwar genauer als die Bash, aus irgendwelchen Gründen scheint der Zähler aber bei 1 zu beginnen und nicht bei 0.

# Üblicherweise mache ich mit gawk aber viel einfachere Dinge.
cat /etc/passwd | gawk -F":" '{print $1,$NF}'
# Das zeigt mir alle Linuxuser und ihre Shell, eben das erste und das letzte Feld in der passwd. Der Vorteil von gawk gegenüber cut ist, dass der Feldtrenner aus mehreren Zeichen bestehen kann.

# Als simples Beispiel nehme ich mal Folgendes:
echo -e "eins und zwei\ndrei und vier\nfuenf und sechs"

        # Das ergibt:
        # eins und zwei
        # drei und vier
        # fuenf und sechs
        
echo -e "eins und zwei\ndrei und vier\nfuenf und sechs" | gawk -F" und " '{print $1$2}'

        # Gawk macht dann daraus:
        # einszwei
        # dreivier
        # fuenfsechs
        # Der Feldtrenner ist in diesem Fall das "und" mit je einem Leerzeichen davor und danach.
        

gawk '{a[$2]++;} ENDFILE {c=0; for (keys in a) { c++;};print c}' 2018* 
# Count of total unique column 2 elements seen so far after each file
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

  █║▌│║█║▌★ KALI ★ PARROT ★ DEBIAN 🔴 PENTESTING ★ HACKING ★ █║▌│║█║▌

              ██╗ ██╗ ██████╗  ██████╗ ██╗  ██╗███████╗██████╗
             ████████╗██╔══██╗██╔═══██╗╚██╗██╔╝██╔════╝██╔══██╗
             ╚██╔═██╔╝██║  ██║██║   ██║ ╚███╔╝ █████╗  ██║  ██║
             ████████╗██║  ██║██║   ██║ ██╔██╗ ██╔══╝  ██║  ██║
             ╚██╔═██╔╝██████╔╝╚██████╔╝██╔╝ ██╗███████╗██████╔╝
              ╚═╝ ╚═╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═════╝

               █║▌│║█║▌ WITH COMMANDLINE-KUNGFU POWER █║▌│║█║▌

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░