⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch33_11.htm

📁 the unix power tools
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 33] 33.11 Quick Reference: awk </TITLE><METANAME="DC.title"CONTENT="UNIX Power Tools"><METANAME="DC.creator"CONTENT="Jerry Peek, Tim O'Reilly &amp; Mike Loukides"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1998-08-04T21:46:58Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-260-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch33_01.htm"TITLE="33. Batch Editing"><LINKREL="prev"HREF="ch33_10.htm"TITLE="33.10 Quick Globals from the Command Line with qsubst "><LINKREL="next"HREF="ch33_12.htm"TITLE="33.12 Versions of awk "></HEAD><BODYBGCOLOR="#FFFFFF"TEXT="#000000"><DIVCLASS="htmlnav"><H1><IMGSRC="gifs/smbanner.gif"ALT="UNIX Power Tools"USEMAP="#srchmap"BORDER="0"></H1><MAPNAME="srchmap"><AREASHAPE="RECT"COORDS="0,0,466,58"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="467,0,514,18"HREF="jobjects/fsearch.htm"ALT="Search this book"></MAP><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch33_10.htm"TITLE="33.10 Quick Globals from the Command Line with qsubst "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 33.10 Quick Globals from the Command Line with qsubst "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 33<BR>Batch Editing</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch33_12.htm"TITLE="33.12 Versions of awk "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 33.12 Versions of awk "BORDER="0"></A></TD></TR></TABLE>&nbsp;<HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-2860">33.11 Quick Reference: awk </A></H2><PCLASS="para">This article also covers<SPANCLASS="link"><EMCLASS="emphasis">nawk</EM> and <EMCLASS="emphasis">gawk</EM> (<ACLASS="linkend"HREF="ch33_12.htm"TITLE="Versions of awk ">33.12</A>)</SPAN>.<ACLASS="indexterm"NAME="UPT-ART-2860-IX-AWK-UTILITY"></A><ACLASS="indexterm"NAME="AUTOID-37087"></A><ACLASS="indexterm"NAME="AUTOID-37091"></A><ACLASS="indexterm"NAME="UPT-ART-2860-IX-NAWK-UTILITY"></A><ACLASS="indexterm"NAME="UPT-ART-2860-IX-GAWK-UTILITY"></A>With the exception of array subscripts, values in<CODECLASS="literal">[</CODE>brackets<CODECLASS="literal">]</CODE> are optional; don't type the<CODECLASS="literal">[</CODE> or <CODECLASS="literal">]</CODE>.</P><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="UPT-ART-2860-SECT-1.1">33.11.1 Command-line Syntax </A></H3><PCLASS="para"><EMCLASS="emphasis">awk</EM> can be invoked in two ways:</P><BLOCKQUOTECLASS="screen"><PRECLASS="screen">awk [<CODECLASS="replaceable"><I>options</I></CODE>] '<CODECLASS="replaceable"><I>script</I></CODE>' [<CODECLASS="replaceable"><I>var</I></CODE>=<CODECLASS="replaceable"><I>value</I></CODE>] [<CODECLASS="replaceable"><I>file(s)</I></CODE>]awk [<CODECLASS="replaceable"><I>options</I></CODE>] -f <CODECLASS="replaceable"><I>scriptfile </I></CODE>[<CODECLASS="replaceable"><I>var</I></CODE>=<CODECLASS="replaceable"><I>value</I></CODE>] [<CODECLASS="replaceable"><I>file(s)</I></CODE>]</PRE></BLOCKQUOTE><PCLASS="para">You can specify a <CODECLASS="replaceable"><I>script</I></CODE> directly on the command line, oryou can store a script in a <CODECLASS="replaceable"><I>scriptfile</I></CODE> and specify it with <EMCLASS="emphasis">-f</EM>.In most versions, the <EMCLASS="emphasis">-f</EM> option can be used multiple times.The variable <CODECLASS="replaceable"><I>var</I></CODE> can be assigned a value on the command line. The value can be aliteral, a shell variable (<CODECLASS="literal">$</CODE><CODECLASS="replaceable"><I>name</I></CODE>), or a command substitution (<CODECLASS="literal">`</CODE><CODECLASS="replaceable"><I>cmd</I></CODE><CODECLASS="literal">`</CODE>), but the value isavailable only after a line of input is read (i.e., after the BEGINstatement). <EMCLASS="emphasis">awk</EM> operates on one or more <CODECLASS="replaceable"><I>file(s)</I></CODE>.If none are specified (or if <CODECLASS="literal">-</CODE> is specified), <EMCLASS="emphasis">awk</EM> reads from the<SPANCLASS="link">standard input (<ACLASS="linkend"HREF="ch13_01.htm#UPT-ART-1023"TITLE="Using Standard Input and Output">13.1</A>)</SPAN>.</P><PCLASS="para">The other recognized <CODECLASS="replaceable"><I>options</I></CODE> are:</P><DLCLASS="variablelist"><DTCLASS="term"><CODECLASS="literal">-F</CODE><CODECLASS="replaceable"><I>c</I></CODE></DT><DDCLASS="listitem"><PCLASS="para">Set the field separator to character <CODECLASS="replaceable"><I>c</I></CODE>.This is the same as setting the system variable <EMCLASS="emphasis">FS</EM>.<EMCLASS="emphasis">nawk</EM> allows <CODECLASS="replaceable"><I>c</I></CODE> to be a<SPANCLASS="link">regular expression (<ACLASS="linkend"HREF="ch26_04.htm"TITLE="Using Metacharacters in Regular Expressions ">26.4</A>)</SPAN>.Each record (by default, one input line) is divided into fields bywhite space (blanks or tabs) or by some other user-definable fieldseparator. Fields are referred to by the variables <CODECLASS="literal">$1</CODE>, <CODECLASS="literal">$2</CODE>,...<CODECLASS="literal">$</CODE><CODECLASS="replaceable"><I>n</I></CODE>. <CODECLASS="literal">$0</CODE> refers to the entire record.For example, toprint the first three (colon-separated) fields on separate lines:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">    % <CODECLASS="userinput"><B>awk -F: '{print $1; print $2; print $3}' /etc/passwd</B></CODE></PRE></BLOCKQUOTE></P><PCLASS="para"></P></DD><DTCLASS="term"><CODECLASS="literal">-v </CODE><CODECLASS="replaceable"><I>var</I></CODE><CODECLASS="literal">=</CODE><CODECLASS="replaceable"><I>value</I></CODE></DT><DDCLASS="listitem"><PCLASS="para">Assign a <CODECLASS="replaceable"><I>value</I></CODE> to variable <CODECLASS="replaceable"><I>var</I></CODE>.This allows assignment before the script begins execution.(Available in <EMCLASS="emphasis">nawk</EM> only.)&#13;</P></DD></DL></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="UPT-ART-2860-SECT-1.2">33.11.2 Patterns and Procedures </A></H3><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-37171"></A><ACLASS="indexterm"NAME="AUTOID-37174"></A><EMCLASS="emphasis">awk</EM> scripts consist of patterns and procedures:</P><BLOCKQUOTECLASS="blockquote"><PCLASS="para"><CODECLASS="replaceable"><I>pattern </I></CODE><CODECLASS="literal">{</CODE><CODECLASS="replaceable"><I>procedure</I></CODE><CODECLASS="literal">}</CODE></P></BLOCKQUOTE><PCLASS="para">Both are optional. If <CODECLASS="replaceable"><I>pattern</I></CODE> is missing, <CODECLASS="literal">{</CODE><CODECLASS="replaceable"><I>procedure</I></CODE><CODECLASS="literal">}</CODE> is applied to all records.If <CODECLASS="literal">{</CODE><CODECLASS="replaceable"><I>procedure</I></CODE><CODECLASS="literal">}</CODE> is missing, the matched recordis written to the standard output.&#13;</P><DIVCLASS="sect3"><H4CLASS="sect3"><ACLASS="title"NAME="UPT-ART-2860-SECT-1.2.1">33.11.2.1 Patterns </A></H4><PCLASS="para"><CODECLASS="replaceable"><I>pattern</I></CODE> can be any of the following:</P><BLOCKQUOTECLASS="screen"><PRECLASS="screen">/<CODECLASS="replaceable"><I>regular expression</I></CODE>/<CODECLASS="replaceable"><I>relational expression</I></CODE><CODECLASS="replaceable"><I>pattern-matching expression</I></CODE>BEGINEND</PRE></BLOCKQUOTE><ULCLASS="itemizedlist"><LICLASS="listitem"><PCLASS="para">Expressions can be composed of quoted strings, numbers, operators,functions, defined variables, or any of the predefined variables described later under the section &quot;awk System Variables.&quot;</P></LI><LICLASS="listitem"><PCLASS="para">Regular expressions use the extended set of metacharacters as described in article<ACLASS="xref"HREF="ch26_04.htm"TITLE="Using Metacharacters in Regular Expressions ">26.4</A>.In addition,<CODECLASS="literal">^</CODE> and <CODECLASS="literal">$</CODE> can be used to refer to the beginning and end of a field, respectively, rather than the beginning and end of a record (line).</P></LI><LICLASS="listitem"><PCLASS="para">Relational expressions use the relational operators listed under the section&quot;Operators&quot; later in this article.Comparisons can be either string or numeric.For example, <CODECLASS="literal">$2</CODE>&nbsp;<CODECLASS="literal">&gt;</CODE>&nbsp;<CODECLASS="literal">$1</CODE> selects records forwhich the second field is greater than the first.</P></LI><LICLASS="listitem"><PCLASS="para">Pattern-matching expressions use the operators <CODECLASS="literal">~</CODE> (match)and <CODECLASS="literal">!~</CODE> (don't match). See the section &quot;Operators&quot; later in this article.</P></LI><LICLASS="listitem"><PCLASS="para">The BEGIN pattern lets you specify procedures that will takeplace <EMCLASS="emphasis">before</EM> the first input record is processed. (Generally, youset global variables here.)</P></LI><LICLASS="listitem"><PCLASS="para">The END pattern lets you specify procedures thatwill take place <EMCLASS="emphasis">after</EM> the last input record is read.</P></LI></UL><PCLASS="para">Except for BEGIN and END,patterns can be combined with the Boolean operators <CODECLASS="literal">||</CODE> (OR), <CODECLASS="literal">&amp;&amp;</CODE> (AND), and <CODECLASS="literal">!</CODE> (NOT). A range of lines can also be specified using comma-separated patterns:</P><BLOCKQUOTECLASS="blockquote"><PCLASS="para"><CODECLASS="replaceable"><I>pattern</I></CODE><CODECLASS="literal">,</CODE><CODECLASS="replaceable"><I>pattern</I></CODE></P></BLOCKQUOTE></DIV><DIVCLASS="sect3"><H4CLASS="sect3"><ACLASS="title"NAME="UPT-ART-2860-SECT-1.2.2">33.11.2.2 Procedures </A></H4><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-37235"></A><CODECLASS="replaceable"><I>procedure</I></CODE> can consist of one or more commands, functions, or variableassignments, separated by newlines or semicolons (<CODECLASS="literal">;</CODE>), and contained withincurly braces (<CODECLASS="literal">{}</CODE>). Commands fall into four groups:</P><ULCLASS="itemizedlist"><LICLASS="listitem"><PCLASS="para">Variable or array assignments</P></LI><LICLASS="listitem"><PCLASS="para">Printing commands&#13;</P></LI><LICLASS="listitem"><PCLASS="para">Built-in functions</P></LI><LICLASS="listitem"><PCLASS="para">Control-flow commands</P></LI></UL></DIV><DIVCLASS="sect3"><H4CLASS="sect3"><ACLASS="title"NAME="UPT-ART-2860-SECT-1.2.3">33.11.2.3 Simple Pattern-Procedure Examples </A></H4><OLCLASS="orderedlist"><LICLASS="listitem"><PCLASS="para">Print first field of each line:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">{ print $1 }</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Print all lines that contain <CODECLASS="literal">pattern</CODE>:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">/pattern/</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Print first field of lines that contain <CODECLASS="literal">pattern</CODE>:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">/pattern/{ print $1 }</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Print records containing more than two fields:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">NF &gt; 2</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Interpret input records as a group of lines up toa blank line:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">BEGIN { FS = &quot;\n&quot;; RS = &quot;&quot; }{ <CODECLASS="replaceable"><I>...process records...</I></CODE> }</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Print fields 2 and 3 in switched order, but only on lineswhose first field matches the string <CODECLASS="literal">URGENT</CODE>:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">$1 ~ /URGENT/ { print $3, $2 }</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Count and print the number of <CODECLASS="literal">pattern</CODE> found:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">/pattern/ { ++x }END { print x }</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Add numbers in second column and print total:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">{total += $2 }; END { print &quot;column total is&quot;, total}</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Print lines that contain less than 20 characters:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">length($0) &lt; 20</PRE></BLOCKQUOTE></P><PCLASS="para"></P></LI><LICLASS="listitem"><PCLASS="para">Print each line that begins with <CODECLASS="literal">Name:</CODE> and that contains exactly seven fields:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">NF == 7 &amp;&amp; /^Name:/</PRE></BLOCKQUOTE></P></LI></OL></DIV></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="UPT-ART-2860-SECT-1.3">33.11.3 awk System Variables </A></H3><PCLASS="para"><ACLASS="indexterm"NAME="AUTOID-37311"></A><ACLASS="indexterm"NAME="AUTOID-37314"></A><EMCLASS="emphasis">nawk</EM> supports all <EMCLASS="emphasis">awk</EM> variables.<EMCLASS="emphasis">gawk</EM> supports both <EMCLASS="emphasis">nawk</EM> and <EMCLASS="emphasis">awk</EM>.<TABLECLASS="informaltable"><THEADCLASS="thead"><TRCLASS="row"VALIGN="TOP"><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Version</TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Variable</TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1">Description</TH></TR></THEAD><TBODYCLASS="tbody"><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">awk</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">FILENAME</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Current filename</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">FS</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Field separator (default is whitespace)</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">NF</TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1">Number of fields in current record</TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"></TD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -