Der Reportgenerator awk
Introawk-ProgrammEinführende BeispieleSonderzeichenFelderawk-Sprachelemente
KonstantenVariablenAusdrücke
awk-Aktionenawk-Funktionen
Numerische FunktionenFunktionen auf ZeichenkettenE/A- und generelle Funktionen
Übergabe von Shellparametern
Einfache Beispiele
Beispiele zu den Mustern
Beispiele zu den BEGIN- und
END-
MusternArithmetik und Variablen
(Einführende Beispiele)
ArraysAssoziative Arrays
Beispiele zu den Assoziativen Arrays
Beispiele zur Interaktion mit dem Shell-ProgrammKalender Beispiel
awk [-Fz] [parameter] [awk_program] [file . . .] awk [-Fz] [parameter] -f awk_script [file . . .]
BEGIN { start_actions } # optional
pattern1 { action1 }
pattern2 { action2 }
. . . . . .
END { end_actions } # optional
$ awk '/pattern/ { print }' filenames . . .
$ awk '/pattern/' filenames
$ awk '{ print }' filenames . . .
print . . . | "program args"
$ awk 'length > maxl {print . . .}' maxl=30
$ awk . . . 'BEGIN {length = ARGV[1]} . . .'
$ sed 3q /etc/passwd | \
awk -F: '{ print $1 }'
$ awk '{ print NR, $0 }'
$ awk '{ printf "%4d %s\n", NR, $0 }'
$ awk '{ printf "\t%s\n", $0 }'
awk -F: '$2 == ""' /etc/passwd
$2 == ""
$2 ~ /^$/
$2 !~ /./
length($2) == 0
NF % 2 != 0
length($0) > 72 {
print "Line", NR, "too long:",
substr($0, 1, 60)
}
$ date | awk '{print substr($4, 1, 5)}'
$ awk 'BEGIN { FS = ":" } gleich wie -F
$2 == "" ' /etc/passwd
$
$ awk 'END { print NR }' . . . == wc -l
{s = s + $1}
END {print s}
{s += $1}
END {print s, s/NR}
{
nc += length($0) + 1
nw += NF
}
END {print NR, nw, nc}
$ wc filenames . . . | awk '!/ total$/ {
n += int (($1+55)/56)
}
END { print n } '
$
awk '
{ line[NR] = $0 }
END {
for ( i = NR; i > 0; i-- )
print line[i]
}
' $*
$ sed 1q /etc/passwd | \
awk '{split($0, a, ":"); print a[1]}'
$ echo 5/10/86 | \
awk '{split($0, date, "/"); print date[3]}'
Susie 400
John 100
Mary 200
Mary 300
John 100
Susie 100
Mary 100
{sum[$1] += $2}
END {for (name in sum) print name, sum[name]}
John 200
Susie 500
Mary 600
awk '{ for (i = 1; i <= NF; i++) num[$i]++ }
END { for (word in num) print word, num[word] }'
$ sed 's/->/ /g' | awk '
BEGIN {
N = 80
for (i = 1; i <= N; i++) blanks = blanks " "
}
{
if ((n = length($0)) <= N) print
else {
for (i = 1; n > N; n -= N) {
printf "%s\\\n", substr($0,i,N)
i += N;
}
printf "%s%s\n",substr(blanks,1,N-n),substr($0,i)
}
} '
$ name arg1 arg2 arg3 . . . arg9 arg10 . . . name $1 $2 $3 $9
$ awk '{print $'$1'}' . . .
$ awk "{print \$$1}" . . .
$ awk '{s += $'$1'}
END {print s}'
$ awk '
BEGIN {
n = '$1'
}
{
for (i = 1; i <= n; i++) sum[i] += $i
}
END {
for (i = 1; i <= n; i++) {
printf "%6g ", sum[i]
total += sum[i]
}
printf "; total = %6g\n", total
}'
$ awk < $HOME/calendar '
BEGIN {
x = "Jan 31 Feb 28 Mar 31 Apr 30 May 31 Jun 30 " \
"Jul 31 Aug 31 Sep 30 Oct 31 Nov 30 Dec 31 Jan 31"
split(x, data)
for (i = 1; i < 24; i += 2) {
days[data[i]] = data[i+1]
nextmon[data[i]] = data[i + 2]
}
#split("'"`date`"'", date) old & ungly!
"date" | getline; split($0, date) new & nice!
mon1 = date[2]; day1 = date[3]
mon2 = mon1; day2 = day1 + 1
if (day1 = days[mon1]) {
day2 = 1
mon2 = nextmon[mon1]
}
}
$1 == mon1 && $2 == day1 || $1 == mon2 && $2 == day2
' | mail $NAME
$ cat ~adamov/calendar
Oct 17 Mother's Birthday
Nov 21 Project Meeting
Dec 1 Parnas' Talk
$
$ cat early.morning
calendar
echo early.morning | at 5am
$
LANsys 15.03.2004