1、
awk , , 。
awk
。 , C 、python bash。
awk
, awk, 。 :
$ awk '{ print }'
/etc/passwd
/etc/passwd 。 , awk 。 awk ,
/etc/passwd 。 awk , /etc/passwd print 。
stdout, catting /etc/passwd 。
, { print } 。 awk , , C 。 print 。
awk , print , 。
awk , :
$ awk '{ print $0 }' /etc/passwd
awk ,$0 , print print $0 。
awk , 。
1:
$ awk '{ print "" }'
/etc/passwd
"" print
, 。 , /etc/passwd ,awk
。 ,awk 。
2:
$ awk '{ print "hiya" }' /etc/passwd
hiya。
2、
awk , awk
。
:
$ awk -F":" '{ print $1 }'
/etc/passwd
, awk , -F ":" 。awk print $1
, 。
:
$ awk -F":" '{ print $1 $3 }'
/etc/passwd
:
halt7
operator11
root0
shutdown6
sync5
bin1
....etc.
,awk /etc/passwd
, 。 , , -- ! bash
python , print $1 $3 。 , awk ,awk
。 :
$ awk -F":" '{ print $1 " " $3 }'
/etc/passwd
print , $1、" " $3, 。
:
$ awk -F":" '{
print "username: " $1 "ttuid:" $3" }' /etc/passwd
:
username: halt uid:7
username: operator
uid:11
username: root uid:0
username: shutdown
uid:6
username: sync uid:5
username: bin
uid:1
....etc.
3、
awk 。
, , awk -f , :
$
awk -f myscript.awk myfile.in
awk 。 :
BEGIN {
FS=":"
}
{ print $1
}
/etc/passwd
, ( FS )。
, 。
4、begin end
BEGIN END
, ,awk 。 , awk
。 ,awk BEGIN 。 BEGIN 。 awk
BEGIN , FS( ) 、 。
awk , END 。awk 。 ,END
。
5、
awk
, 。
foo :
/foo/ { print }
, :
/[0-9]+.[0-9]*/ { print }
, 。 ,awk
。 fred 。 fred,awk
print :
$1 == "fred" { print $3 }
awk , "=="、"<"、">"、"<="、">=" "!="。 ,awk
"~" "!~"
, “ ” “ ”。
, 。
root, :
$5 ~ /root/ { print $3 }
6、
awk C if 。if :
{
if ( $5 ~ /root/ ) {
print $3
}
}
, if
print 。
awk if 。
{
if ( $1 == "foo" )
{
if ( $2 == "foo" ) {
print "uno"
} else
{
print "one"
}
} else if ($1 == "bar" )
{
print "two"
} else
{
print "three"
}
}
if :
! /matchme/ { print $1 $3 $4 }
:
{
if (
$0 !~ /matchme/ ) {
print $1 $3 $4
}
}
matchme 。
awk "||"( ) "&&"( ), :
( $1 == "foo" )
&& ( $2 == "bar" ) { print }
foo bar 。
7、
awk , 。
, 、 。 ,awk 。 , 。
BEGIN
{ x=0 }
/^$/ { x=x+1 }
END { print "I found " x " blank lines. :}"
}
BEGIN , x 。 ,awk ,awk x=x+1 ,
x。
, END ,awk , 。
awk “ ”。 awk “ ” awk
。 ,awk “ ”, , ,awk
。 , :
x="1.01"
# We just set x to contain the
*string* "1.01"
x=x+1
# We just added one to a *string*
print x
#
Incidentally, these are comments :)
awk :
2.01
1.01 x, 。 bash python 。
,bash
。 , bash “ ” , “ ”; ,bash $( ) )
。
python, 1.01 , 。 , 。
awk, , 。 , :
{ print ($1^2)+1
}
, ,awk 。
8、
awk 。 、 、 、 ,awk
"^"、 ( ) "%" C 。
(i++、--foo)、 / / / ( a+=3、b*=2、c/=2.2、d-=6.2)。 --
/ (a^=2、b%=4)。
awk 。 awk
, 。 ,FS。 , awk
。 /etc/passwd , FS ":"。 , FS。
FS ; , 。 tab
, FS:
FS="t+"
, "+" , “ ”。
( tab), FS :
FS="[[:space:]+]"
, 。 ? ,FS ,awk “
tab”。 , FS !
。 "foo" , , :
FS="foo[0-9][0-9][0-9]"
, 。 NF , “ ” 。awk
。 NF :
NF == 3 { print "this particular
record has three fields: " $0 }
, NF , :
{
if (
NF > 2 ) {
print $1 " " $2 ":" $3
}
}
9、
(NR) 。 (awk
1)。 , 。 ,NR
。 , , , ! NF NR
:
(NR < 10 ) || (NR > 100) { print "We are on record number
1-9 or 101+" }
:
{
#skip header
if (NR>10) {
print "ok, now for the real information!"
}
}
awk 。 。
awk ( /etc/passwd ) 。/etc/passwd UNIX
, , , , 。 , awk
。 FS( ) ":"。
FS , awk , 。 , ,
FS 。 , RS 。RS awk , 。
, “ ” :
Jimmy the Weasel
100 Pleasant
Drive
San Francisco, CA 12345
Big Tony
200 Incognito Ave.
Suburbia,
WA 67890
, awk 3 , 。 awk
($1), ($2), 、 $3, 。 :
BEGIN {
FS="n"
RS=""
}
, FS "n" awk 。 RS "", awk
。 awk
, , 。 , , , 。
address.awk
BEGIN {
FS="n"
RS=""
}
{
print $1 ", " $2 ", "
$3
}
address.awk, address.txt , "awk -f address.awk
address.txt" 。 :
Jimmy the Weasel, 100 Pleasant Drive, San
Francisco, CA 12345
Big Tony, 200 Incognito Ave., Suburbia, WA 67890
OFS ORS
address.awk print , awk
( ) 。 (", ")。 , 。
", " , awk OFS, awk 。
print "Hello", "there",
"Jim!"
。 , awk "Hello"、"there" "Jim!"
, OFS 。
,awk :
Hello there Jim!
,OFS " ", 。 , OFS, awk 。
address.awk , OFS ", " :
address.awk
BEGIN {
FS="n"
RS=""
OFS=",
"
}
{
print $1, $2, $3
}
awk
ORS, “ ”。 ("n") OFS, print 。 ORS awk
print 。 , ORS "nn"。 , ( ), ORS
" "。
tab
, , tab
, 。 address.awk , 。 awk
, , :
Cousin Vinnie
Vinnie's Auto Shop
300 City
Alley
Sosueme, OR 76543
, , 。 , 。 :
address.awk
BEGIN {
FS="n"
RS=""
ORS=""
}
{
x=1
while ( x<NF ) {
print $x "t"
x++
}
print $NF "n"
}
, FS "n", RS "", awk 。 , ORS
"", print 。 , print "n"。
, x 。 , 1。 , while ( awk ,
C while ), ( ) tab 。 , ; , ORS
"",print 。 , ( , tab , ):
Jimmy the
Weasel 100 Pleasant Drive San Francisco, CA 12345
Big
Tony 200 Incognito Ave. Suburbia, WA 67890
Cousin Vinnie
Vinnie's Auto Shop 300 City Alley Sosueme, OR 76543