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

📄 ch36_02.htm

📁 the unix power tools
💻 HTM
字号:
<HTML><!--Distributed by F --><HEAD><TITLE>[Chapter 36] 36.2 Sort Fields: How sort Sorts </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:48:38Z"><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="ch36_01.htm"TITLE="36. Sorting"><LINKREL="prev"HREF="ch36_01.htm"TITLE="36.1 Putting Things in Order "><LINKREL="next"HREF="ch36_03.htm"TITLE="36.3 Changing the Field Delimiter "></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="ch36_01.htm"TITLE="36.1 Putting Things in Order "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 36.1 Putting Things in Order "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1">Chapter 36<BR>Sorting</FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch36_03.htm"TITLE="36.3 Changing the Field Delimiter "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 36.3 Changing the Field Delimiter "BORDER="0"></A></TD></TR></TABLE>&nbsp;<HRALIGN="LEFT"WIDTH="515"TITLE="footer"></DIV><DIVCLASS="SECT1"><H2CLASS="sect1"><ACLASS="title"NAME="UPT-ART-2925">36.2 Sort Fields: How sort Sorts </A></H2><PCLASS="para"><ACLASS="indexterm"NAME="UPT-ART-2925-IX-SORT-COMMAND-DESCRIBED"></A><ACLASS="indexterm"NAME="UPT-ART-2925-IX-SORT-COMMAND-FIELDS"></A>Unless you tell it otherwise, <EMCLASS="emphasis">sort</EM> divides each line into fieldsat white space (blanks or tabs),and sorts the lines, by field, from left to right. </P><PCLASS="para">That is, it sorts onthe basis of field 0 (leftmost); but when the leftmost fields arethe same, it sorts on the basis of field 1; and so on.This is hard to put into words, but it's really just common sense.Suppose your office inventory manager created a file like this:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">supplies     pencils  148furniture    chairs   40kitchen      knives   22kitchen      forks    20supplies     pens     236furniture    couches  10furniture    tables   7supplies     paper    29</PRE></BLOCKQUOTE></P><PCLASS="para">You'd want all the supplies sorted into categories and within eachcategory, you'd want them sorted alphabetically:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="userinput"><B>sort supplies</B></CODE>furniture    chairs   40furniture    couches  10furniture    tables   7kitchen      forks    20kitchen      knives   22supplies     paper    29supplies     pencils  148supplies     pens     236</PRE></BLOCKQUOTE></P><PCLASS="para">Of course, you don't always want to sort from left to right. Thecommand line option <EMCLASS="emphasis">+n</EM> tells <EMCLASS="emphasis">sort</EM> to start sorting onfield <EMCLASS="emphasis">n</EM>; <EMCLASS="emphasis">-n</EM> tells <EMCLASS="emphasis">sort</EM> to stop sorting on field<EMCLASS="emphasis">n</EM>. Remember (again) that <EMCLASS="emphasis">sort</EM> counts fields from left toright, starting with 0.[1]Here's an example. We want to sort a list of telephone numbers of authors, presidents, and blues singers:</P><BLOCKQUOTECLASS="footnote"><PCLASS="para">[1] I harp on this because I always get confused and have to look it up inthe manual page.</P></BLOCKQUOTE><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">Robert M Johnson      344-0909Lyndon B Johnson      933-1423Samuel H Johnson      754-2542Michael K Loukides    112-2535Jerry O Peek          267-2345Timothy F O'Reilly    443-2434</PRE></BLOCKQUOTE></P><PCLASS="para">According to standard &quot;telephone book rules,&quot; we want these namessorted by last name, first name, and middle initial. We don'twant the phone number to play a part in the sorting.So we want to start sorting on field 2, stop sorting on field 3,continue sorting on field 0, sort on field 1, and (just to make sure)stop sorting on field 2 (the last name). We can code this as follows:&#13;</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="userinput"><B>sort +2 -3 +0 -2 phonelist</B></CODE>Lyndon B Johnson      933-1423Robert M Johnson      344-0909Samuel H Johnson      754-2542Michael K Loukides    112-2535Timothy F O'Reilly    443-2434Jerry O Peek          267-2345</PRE></BLOCKQUOTE></P><PCLASS="para">A few notes:</P><ULCLASS="itemizedlist"><LICLASS="listitem"><PCLASS="para">We need the <EMCLASS="emphasis">-3</EM> option to prevent <EMCLASS="emphasis">sort</EM> from sorting on thetelephone number after sorting on the last name. Without <EMCLASS="emphasis">-3</EM>,the &quot;Robert Johnson&quot; entry would appear before &quot;Lyndon Johnson&quot;because it has a lower phone number.</P></LI><LICLASS="listitem"><PCLASS="para">We don't need to state <EMCLASS="emphasis">+1</EM> explicitly. Unless you give anexplicit &quot;stop&quot; field, <EMCLASS="emphasis">+1</EM> is implied after <EMCLASS="emphasis">+0</EM>.</P></LI><LICLASS="listitem"><PCLASS="para">If two names are completely identical, we probably don't care whathappens next. However, just to be sure that something unexpecteddoesn't take place, we end the option list with <EMCLASS="emphasis">-2</EM>, which says,&quot;After sorting on the middle initial, don't do any further sorting.&quot;</P></LI></UL><PCLASS="para">There are a couple of variations that are worth mentioning. You maynever need them unless you're really serious about sorting data files,but it's good to keep them in the back of your mind. First, you canadd any &quot;collation&quot; operations (discard blanks, numeric sort, etc.) tothe end of a field specifier to describe how you want that fieldsorted. Using our previous example, let's say that if two names<EMCLASS="emphasis">are</EM> identical, you want them sorted in numeric phone numberorder. The following command does the trick:</P><PCLASS="para"><BLOCKQUOTECLASS="screen"><PRECLASS="screen">% <CODECLASS="literal">sort +2 -3 +0 -2 +3n phonelist</CODE></PRE></BLOCKQUOTE></P><PCLASS="para">The <EMCLASS="emphasis">+3n</EM> option says &quot;do a numeric sort on the fourth field.&quot;If you're worried about initial blanks (perhaps some of the phonenumbers have area codes), use <EMCLASS="emphasis">+3nb</EM>.</P><PCLASS="para">Second, you can specify individual columns within any field forsorting, using the notation <EMCLASS="emphasis">+n.c</EM>, where <EMCLASS="emphasis">n</EM> is a fieldnumber, and <EMCLASS="emphasis">c</EM> is a character position within the field.Likewise, the notation <EMCLASS="emphasis">-n.c</EM> says &quot;stop sorting at the characterbefore character <EMCLASS="emphasis">c</EM>.&quot;If you're counting characters, be sure touse the <EMCLASS="emphasis">-b</EM> (ignore white space) option&nbsp;- otherwise, it will bevery difficult to figure out what character you're counting.<ACLASS="indexterm"NAME="AUTOID-41541"></A></P><DIVCLASS="sect1info"><PCLASS="SECT1INFO">- <SPANCLASS="authorinitials">ML</SPAN></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><TABLEWIDTH="515"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch36_01.htm"TITLE="36.1 Putting Things in Order "><IMGSRC="gifs/txtpreva.gif"SRC="gifs/txtpreva.gif"ALT="Previous: 36.1 Putting Things in Order "BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="book"HREF="index.htm"TITLE="UNIX Power Tools"><IMGSRC="gifs/txthome.gif"SRC="gifs/txthome.gif"ALT="UNIX Power Tools"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172"><ACLASS="SECT1"HREF="ch36_03.htm"TITLE="36.3 Changing the Field Delimiter "><IMGSRC="gifs/txtnexta.gif"SRC="gifs/txtnexta.gif"ALT="Next: 36.3 Changing the Field Delimiter "BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="172">36.1 Putting Things in Order </TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="171"><ACLASS="index"HREF="index/idx_0.htm"TITLE="Book Index"><IMGSRC="gifs/index.gif"SRC="gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="172">36.3 Changing the Field Delimiter </TD></TR></TABLE><HRALIGN="LEFT"WIDTH="515"TITLE="footer"><IMGSRC="gifs/smnavbar.gif"SRC="gifs/smnavbar.gif"USEMAP="#map"BORDER="0"ALT="The UNIX CD Bookshelf Navigation"><MAPNAME="map"><AREASHAPE="RECT"COORDS="0,0,73,21"HREF="../index.htm"ALT="The UNIX CD Bookshelf"><AREASHAPE="RECT"COORDS="74,0,163,21"HREF="index.htm"ALT="UNIX Power Tools"><AREASHAPE="RECT"COORDS="164,0,257,21"HREF="../unixnut/index.htm"ALT="UNIX in a Nutshell"><AREASHAPE="RECT"COORDS="258,0,321,21"HREF="../vi/index.htm"ALT="Learning the vi Editor"><AREASHAPE="RECT"COORDS="322,0,378,21"HREF="../sedawk/index.htm"ALT="sed &amp; awk"><AREASHAPE="RECT"COORDS="379,0,438,21"HREF="../ksh/index.htm"ALT="Learning the Korn Shell"><AREASHAPE="RECT"COORDS="439,0,514,21"HREF="../lrnunix/index.htm"ALT="Learning the UNIX Operating System"></MAP></DIV></BODY></HTML>

⌨️ 快捷键说明

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