AWK

Aus WS64 Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K
K
Zeile 1: Zeile 1:
 
[[Category:Computer]]
 
[[Category:Computer]]
 
[[Category:Arbeit]]
 
[[Category:Arbeit]]
[[Media:awk_library.TXT|awk_library.TXT]]
 
 
 
[[Media:awk_deutsch.pdf|awk_deutsch.pdf]]
 
[[Media:awk_deutsch.pdf|awk_deutsch.pdf]]
  
Zeile 8: Zeile 6:
  
 
[[Media:awk.docx|Cheat Sheet 2 (DOCX)]]
 
[[Media:awk.docx|Cheat Sheet 2 (DOCX)]]
 +
 +
<pre>Invoking Awk:
 +
  awk [-F<ch>] {pgm} | {-f <pgm file>} [<vars>] [-|<data file>]
 +
-- where:
 +
  ch:          Field-separator character.
 +
  pgm:        Awk command-line program.
 +
  pgm file:    File containing an Awk program.
 +
  vars:        Awk variable initializations.
 +
  data file:  Input data file.
 +
</pre>
 +
 +
<pre>AWK Library
 +
 +
# PATH Variables, each in a new line, headline separated:
 +
path | awk "{str=$0;gsub(\";\",\"\n\",str);sub(\"=\",\"\n\n\",str);print str}"
 +
# gsub: alle Vorkommen von ; durch Zeilenumbruch. sub: erstes Vorkommen von = durch 2 Zeilenumbrüche ersetzen
 +
 +
# Leerzeilen weg
 +
awk "NF>0" 1.txt
 +
 +
# doppelte aufeinanderfolgende Zeilen raus
 +
awk "{if (a!=$0) {print $0};a=$0}" 1.TXT
 +
 +
# Anzahl Zeilen
 +
awk "END { print NR \" lines\" }" 1.TXT
 +
 +
# Anzahl Wörter
 +
awk "{ nw += NF } END { print nw \" words\"}" 1.TXT
 +
 +
# Anzahl Buchstaben
 +
awk "{ nc += length($0) } END { print nc \" chars\" }" 1.TXT
 +
 +
# Anzahlen
 +
awk "{ nw += NF;nc += length($0);if (NF==0) e++;} END { print \"\nFile : \" FILENAME \"\nLines: \" NR \" (empty: \" e+0 \")\nWords: \" nw \"\nChars: \" nc}" 1.TXT
 +
 +
# Erzeuge Copy-Befehl, der den Dateinamen durch den Verzeichnispfad ersetzt
 +
dir /b /s *.bat | awk -v wobinich=%cd:\=/% -F\ "BEGIN {print \"REM Copy Filename to last Directoryname\";a=\"\x22\";bs=\"\x5c\";b=\" \";split(wobinich,ar,\"/\");start=length(ar)}{split($NF,ex,\".\");t=$(start);s=$(start);for (i=start+1;i<NF;i++){t=t bs $i;s=s \"_\" $i};print \"copy \"a $0 a b a t bs s  \".\" ex[length(ex)] a}"
 +
 +
# Hänge allen Files in CSV noch ein Semikolon plus Dateinamen (ohne Extension) an
 +
awk.exe -F; "$1!~/CWID/ {print $0\";\"substr(substr(FILENAME,1,length(FILENAME)-4),5)}" csv\*.csv > All.csv
 +
# der innere substr entfernt die Extension, der äussere das 3stellige Verzeichnis (CSV) vorne
 +
 +
#Nummeriere Textfile, aber nicht die Leerzeilen
 +
NF {c=++a;printf ("%5d: %s\n",c,$0)} NF==0
 +
 +
#Sortieren und doppelte Zeilen raus (Leerzeilen auch)
 +
NF {a[$0]=1} END {for (i=1;i<asorti(a,b);i++)print b[i];printf b[i]}
 +
#ungeordnet (durcheinander!) plus Leerzeile, aber schneller (7MB/12000DS: ~3 min sortiert, <1 sek unsortiert):
 +
NF {a[$0]=1} END {for (w in a) print w}</pre>

Version vom 3. September 2013, 13:49 Uhr

awk_deutsch.pdf

Cheat Sheet 1 (PDF)

Cheat Sheet 2 (DOCX)

Invoking Awk: 
   awk [-F<ch>] {pgm} | {-f <pgm file>} [<vars>] [-|<data file>]
-- where: 
   ch:          Field-separator character.
   pgm:         Awk command-line program.
   pgm file:    File containing an Awk program.
   vars:        Awk variable initializations.
   data file:   Input data file.
AWK Library

# PATH Variables, each in a new line, headline separated:
path | awk "{str=$0;gsub(\";\",\"\n\",str);sub(\"=\",\"\n\n\",str);print str}"
# gsub: alle Vorkommen von ; durch Zeilenumbruch. sub: erstes Vorkommen von = durch 2 Zeilenumbrüche ersetzen

# Leerzeilen weg
awk "NF>0" 1.txt

# doppelte aufeinanderfolgende Zeilen raus
awk "{if (a!=$0) {print $0};a=$0}" 1.TXT

# Anzahl Zeilen
awk "END { print NR \" lines\" }" 1.TXT

# Anzahl Wörter
awk "{ nw += NF } END { print nw \" words\"}" 1.TXT

# Anzahl Buchstaben
awk "{ nc += length($0) } END { print nc \" chars\" }" 1.TXT

# Anzahlen
awk "{ nw += NF;nc += length($0);if (NF==0) e++;} END { print \"\nFile : \" FILENAME \"\nLines: \" NR \" (empty: \" e+0 \")\nWords: \" nw \"\nChars: \" nc}" 1.TXT

# Erzeuge Copy-Befehl, der den Dateinamen durch den Verzeichnispfad ersetzt
dir /b /s *.bat | awk -v wobinich=%cd:\=/% -F\ "BEGIN {print \"REM Copy Filename to last Directoryname\";a=\"\x22\";bs=\"\x5c\";b=\" \";split(wobinich,ar,\"/\");start=length(ar)}{split($NF,ex,\".\");t=$(start);s=$(start);for (i=start+1;i<NF;i++){t=t bs $i;s=s \"_\" $i};print \"copy \"a $0 a b a t bs s  \".\" ex[length(ex)] a}"

# Hänge allen Files in CSV noch ein Semikolon plus Dateinamen (ohne Extension) an
awk.exe -F; "$1!~/CWID/ {print $0\";\"substr(substr(FILENAME,1,length(FILENAME)-4),5)}" csv\*.csv > All.csv
# der innere substr entfernt die Extension, der äussere das 3stellige Verzeichnis (CSV) vorne

#Nummeriere Textfile, aber nicht die Leerzeilen
NF {c=++a;printf ("%5d: %s\n",c,$0)} NF==0

#Sortieren und doppelte Zeilen raus (Leerzeilen auch)
NF {a[$0]=1} END {for (i=1;i<asorti(a,b);i++)print b[i];printf b[i]}
#ungeordnet (durcheinander!) plus Leerzeile, aber schneller (7MB/12000DS: ~3 min sortiert, <1 sek unsortiert):
NF {a[$0]=1} END {for (w in a) print w}
Meine Werkzeuge
Kategorien
Arbeit
Misc
Music
Privat
PUBLIC