AWK
Aus WS64 Wiki
(Unterschied zwischen Versionen)
WS64 (Diskussion | Beiträge) K |
WS64 (Diskussion | Beiträge) K |
||
Zeile 1: | Zeile 1: | ||
[[Category:Computer]] | [[Category:Computer]] | ||
[[Category:Arbeit]] | [[Category:Arbeit]] | ||
− | |||
− | |||
[[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, 12:49 Uhr
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}