[Ubuntu-zh] awk1line中文版

Yisu Dong ximiff在gmail.com
星期六 四月 26 01:41:28 BST 2008


AWKÊǸöºÜÇ¿µÄÎı¾´¦Àí¹¤¾ß£¬awk1line¸ü·¢»ÓÁËAWKÁé»î¼òµ¥µÄÌØÐÔ¡£
ËÑË÷ÁËһϷ¢ÏÖ»¹Ã»ÓÐawk1lineµÄÖÐÎİ棬ËùÒÔ×Ô¼º·­ÒëÁËһϣ¬¿ÉÄܶԴó¼Ò»áÓеã°ïÖú£º£©

================================================================

AWKµ¥Ðнű¾¿ìËٲο¼                                      2003Äê7ÔÂ22ÈÕ
±à¼­£º Eric Pement <pemente在northpark.edu>                °æ±¾ 0.22
·­Ò룺 yisudong      <yisudong在gmail.com>
   ×îÐÂÓ¢ÎÄ°æ±¾Îļþ·¢²¼ÔÚÒÔϵØÖ·£º
   http://www.student.northpark.edu/pemente/awk/awk1line.txt
   ×îÐÂÖÐÎÄ·­Òë°æ±¾Îļþ·¢²¼ÔÚÒÔϵØÖ·£º
   http://ximix.org/translation/awk1line_zh-CN.txt

Ó÷¨£º

    Unix:  awk '/pattern/ {print "$1"}'    # ±ê×¼ Unix shell»·¾³
 DOS/Win:  awk '/pattern/ {print "$1"}'    # DJGPP ¿É±àÒëͨ¹ý
           awk "/pattern/ {print \"$1\"}"  # ÐèÒª°²×° Mingw32


ÎҵĴó¶àÊý¾­ÑéÀ´×ÔÓÚWin32µÄGNU awk £¨gawk£©°æ±¾¡£ÐèÒªÌرð×¢ÒâµÄÊÇ£¬DJGPP
±àÒëÆ÷¿ÉÒÔÔÊÐíawk½Å±¾Ê¹ÓÃUnixµÄÒýºÅÓï·¨ '/like/ {"this"}'¡£µ«ÊÇ£¬Óû§±Ø
ÐëÖªµÀÔÚDOS/Windows»·¾³Ï£¬µ¥ÒýºÅ²¢²»Äܱ£»¤Öض¨Ïò·ûºÅ£¨<, >£©ºÍ¹ÜµÀ£¨|£©¡£
Èç¹ûʹÓÃË«ÒýºÅµÄ»°£¬ÔÚDOS/CMDÃüÁî½âÊÍÆ÷ϵÄÌØÊâ·ûºÅºÍËûÃǵÄÌØÊ⺬Ò嶼
»á±»ºöÂÔ¡£Í¬Ñù£¬DOS/WinÓû§±ØÐë¼ÇסÓ㬰ٷֺţ¨%£©ÓÃÀ´±ê¼ÇDOS/Win»·¾³±äÁ¿£¬
Èç¹ûÏëÒªÔÚawkʹÓõĻ°£¬ÐèҪʹÓÃË«°Ù·ÖºÅ£¨%%£©À´±íʾһ¸ö°Ù·ÖºÅ%¡£

Èç¹ûÎÒÄÜÈ·¶¨Ò»¸ö½Å±¾²»ÐèÒª±»Ö¸³öÊÇʹÓÃÔÚUnix, DOS»òÕßCMD»·¾³Ï£¬ÎÒͨ³£
²»×÷³öÌáʾ¡£Èç¹ûÒ»¸öÀý×ÓÊÇGNU awkËùÌØÓеģ¬½«»áÓà 'gawk'ÃüÁîÀ´´úÌæ¡£Èç
¹ûÄã·¢ÏÖ´íÎó»òÕßеÄÃüÁîÏëÒªÌí¼Óµ½Õâ¸öÁбíÀ×ܳ¤¶È¿ØÖÆÔÚ65¸ö×Ö·ûһϣ©
£¬Çë֪ͨÎÒ¡£Ê×ÏÈÎÒ¾­³£»á³¢ÊÔȥдһ¸ö×î¶Ì×Ö·ûµÄ½Å±¾¡£

Îı¾¼ä¸ô£º

 # ÿÐкóÃæÔö¼ÓÒ»ÐпÕÐÐ
 awk '1;{print ""}'
 awk 'BEGIN{ORS="\n\n"};1'

 # ÿÐкóÃæÔö¼ÓÒ»ÐпÕÐС£Êä³öÎļþ²»»á°üº¬Á¬ÐøµÄÁ½¸ö»òÁ½¸öÒÔÉϵĿÕÐÐ
 # ×¢Ò⣺ÔÚUnixϵͳ£¬ DOSÐаüÀ¨µÄ CRLF £¨\r\n£© ͨ³£»á±»×÷Ϊ·Ç¿ÕÐжԴý
 # Òò´Ë 'NF' ½«»á·µ»ØTRUE¡£
 awk 'NF{print $0 "\n"}'

 # ÿÐкóÃæÔö¼ÓÁ½ÐпÕÐÐ
 awk '1;{print "\n"}'

±àºÅºÍ¼ÆË㣺

 # ÒÔÎļþΪµ¥Î»£¬ÔÚÿ¾äÐÐÇ°¼ÓÉϱàºÅ £¨×ó¶ÔÆ룩.
 # ʹÓÃÖƱí·û £¨\t£© À´´úÌæ¿Õ¸ñ¿ÉÒÔÓÐЧ±£»¤Ò³±äµÄ¿Õ°×¡£
 awk '{print FNR "\t" $0}' files*

 # ÓÃÖƱí·û £¨\t£© ¸øËùÓÐÎļþ¼ÓÉÏÁ¬¹áµÄ±àºÅ¡£
 awk '{print NR "\t" $0}' files*

 # number each line of a file £¨number on left, right-aligned£©
 # Double the percent signs if typing from the DOS command prompt.
 awk '{printf("%5d : %s\n", NR,$0)}'

 # ¸ø·Ç¿Õ°×ÐеÄÐмÓÉϱàºÅ
 # ¼ÇµÃUnix¶ÔÓÚ \r µÄ´¦ÀíµÄÌØÊâÖ®´¦¡££¨ÉÏÃæÒѾ­Ìáµ½£©
 awk 'NF{$0=++a " :" $0};{print}'
 awk '{print (NF? ++a " :" :"") $0}'

 # ¼ÆËãÐÐÊý £¨Ä£Äâ "wc -l"£©
 awk 'END{print NR}'

 # ¼ÆËãÿÐÐÿ¸öÇøÓòÖ®ºÍ
 awk '{s=0; for (i=1; i<=NF; i++) s=s+$i; print s}'

 # ¼ÆËãËùÓÐÐÐËùÓÐÇøÓòµÄ×ܺÍ
 awk '{for (i=1; i<=NF; i++) s=s+$i}; END{print s}'

 # ´òӡÿÐÐÿÇøÓòµÄ¾ø¶ÔÖµ
 awk '{for (i=1; i<=NF; i++) if ($i < 0) $i = -$i; print }'
 awk '{for (i=1; i<=NF; i++) $i = ($i < 0) ? -$i : $i; print }'

 # ¼ÆËãËùÓÐÐÐËùÓÐÇøÓò£¨´Ê£©µÄ¸öÊý
 awk '{ total = total + NF }; END {print total}' file

 # ´òÓ¡°üº¬ "Beth" µÄÐÐÊý
 awk '/Beth/{n++}; END {print n+0}' file

 # ´òÓ¡µÚÒ»ÁÐ×î´óµÄÐÐ
 # ²¢ÇÒÔÚÐÐÇ°´òÓ¡³öÕâ¸ö×î´óµÄÊý
 awk '$1 > max {max=$1; maxline=$0}; END{ print max, maxline}'

 # ´òӡÿÐеÄÁÐÊý£¬²¢ÔÚºóÃæ¸úÉÏ´ËÐÐÄÚÈÝ
 awk '{ print NF ":" $0 } '

 # ´òӡÿÐеÄ×îºóÒ»ÁÐ
 awk '{ print $NF }'

 # ´òÓ¡×îºóÒ»ÐеÄ×îºóÒ»ÁÐ
 awk '{ field = $NF }; END{ print field }'

 # ´òÓ¡ÁÐÊý³¬¹ý4µÄÐÐ
 awk 'NF > 4'

 # ´òÓ¡×îºóÒ»ÁдóÓÚ4µÄÐÐ
 awk '$NF > 4'


Îı¾×ª»»ºÍÌæ´ú£º

 # ÔÚUnix»·¾³£º×ª»»DOSÐÂÐÐ £¨CR/LF£© ΪUnix¸ñʽ
 awk '{sub(/\r$/,"");print}'   # ¼ÙÉèÿÐж¼ÒÔCtrl-M½áβ

 # ÔÚUnix»·¾³£º×ª»»UnixÐÂÐÐ £¨LF£© ΪDOS¸ñʽ
 awk '{sub(/$/,"\r");print}

 # ÔÚDOS»·¾³£º×ª»»UnixÐÂÐÐ £¨LF£© ΪDOS¸ñʽ
 awk 1

 # ÔÚDOS»·¾³£º×ª»»DOSÐÂÐÐ £¨CR/LF£© ΪUnix¸ñʽ
 # DOS°æ±¾µÄawk²»ÄÜÔËÐÐ, Ö»ÄÜÓÃgawk:
 gawk -v BINMODE="w" '1' infile >outfile

 # Óà "tr" Ìæ´úµÄ·½·¨¡£
 tr -d \r <infile >outfile            # GNU tr °æ±¾Îª 1.22 »òÕ߸ü¸ß

 # ɾ³ýÿÐÐÇ°µÄ¿Õ°×£¨°üÀ¨¿Õ¸ñ·ûºÍÖƱí·û£©
 # ʹËùÓÐÎı¾×ó¶ÔÆë
 awk '{sub(/^[ \t]+/, ""); print}'

 # ɾ³ýÿÐнáβµÄ¿Õ°×£¨°üÀ¨¿Õ¸ñ·ûºÍÖƱí·û£©
 awk '{sub(/[ \t]+$/, "");print}'

 # ɾ³ýÿÐпªÍ·ºÍ½áβµÄËùÓпհף¨°üÀ¨¿Õ¸ñ·ûºÍÖƱí·û£©
 awk '{gsub(/^[ \t]+|[ \t]+$/,"");print}'
 awk '{$1=$1;print}'           # ÿÁÐÖ®¼äµÄ¿Õ°×Ò²±»É¾³ý

 # ÔÚÿһÐпªÍ·´¦²åÈë5¸ö¿Õ¸ñ £¨×öÕûÒ³µÄ×óλÒÆ£©
 awk '{sub(/^/, "     ");print}'

 # ÓÃ79¸ö×Ö·ûΪ¿í¶È£¬½«È«²¿Îı¾ÓÒ¶ÔÆë
 awk '{printf "%79s\n", $0}' file*

 # ÓÃ79¸ö×Ö·ûΪ¿í¶È£¬½«È«²¿Îı¾¾ÓÖжÔÆë
 awk '{l=length();s=int((79-l)/2); printf "%"(s+l)"s\n",$0}' file*

 # ÿÐÐÓà "bar" ²éÕÒÌæ»» "foo"
 awk '{sub(/foo/,"bar");print}'           # ½ö½öÌæ»»µÚÒ»¸öÕÒµ½µÄ"foo"
 gawk '{$0=gensub(/foo/,"bar",4);print}'  # ½ö½öÌæ»»µÚËĸöÕÒµ½µÄ"foo"
 awk '{gsub(/foo/,"bar");print}'          # È«²¿Ìæ»»

 # ÔÚ°üº¬ "baz" µÄÐÐÀ½« "foo" Ì滻Ϊ "bar"
 awk '/baz/{gsub(/foo/, "bar")};{print}'

 # ÔÚ²»°üº¬ "baz" µÄÐÐÀ½« "foo" Ì滻Ϊ "bar"
 awk '!/baz/{gsub(/foo/, "bar")};{print}'

 # ½« "scarlet" »òÕß "ruby" »òÕß "puce" Ì滻Ϊ "red"
 awk '{gsub(/scarlet|ruby|puce/, "red"); print}'

 # µ¹ÅÅÎı¾ £¨Ä£Äâ "tac"£©
 awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*

 # Èç¹ûÒ»ÐнáβΪ·´Ð±Ïß·û£¬½«ÏÂÒ»Ðнӵ½ÕâÐкóÃæ
 # £¨Èç¹ûÓÐÁ¬Ðø¶àÐкóÃæ´ø·´Ð±Ïß·û£¬½«»áʧ°Ü£©
 awk '/\\$/ {sub(/\\$/,""); getline t; print $0 t; next}; 1' file*

 # ÅÅÐò²¢´òÓ¡ËùÓеǼÓû§µÄÐÕÃû
 awk -F ":" '{ print $1 | "sort" }' /etc/passwd

 # ÒÔÏà·´µÄ˳Ðò´òÓ¡³öÿÐеÄÇ°Á½ÁÐ
 awk '{print $2, $1}' file

 # µ÷»»Ç°Á½ÁеÄλÖÃ
 awk '{temp = $1; $1 = $2; $2 = temp}' file

 # ´òӡÿÐУ¬²¢É¾³ýµÚ¶þÁÐ
 awk '{ $2 = ""; print }'

 # µ¹ÖÃÿÐв¢´òÓ¡
 awk '{for (i=NF; i>0; i--) printf("%s ",i);printf ("\n")}' file

 # ɾ³ýÖظ´Á¬ÐøµÄÐÐ £¨Ä£Äâ "uniq"£©
 awk 'a !~ $0; {a=$0}'

 # ɾ³ýÖظ´µÄ¡¢·ÇÁ¬ÐøµÄÐÐ
 awk '! a[$0]++'                     # ×î¼òÁ·
 awk '!($0 in a) {a[$0];print}'      # ×îÓÐЧ

 # ÓöººÅÁ´½Óÿ5ÐÐ
 awk 'ORS=%NR%5?",":"\n"' file  #bug awk 'ORS=NR%5?",":"\n"' file



Ñ¡ÔñÐԵĴòӡijЩÐУº

 # ´òÓ¡ÎļþµÄÇ°Ê®ÐÐ £¨Ä£Äâ "head"£©
 awk 'NR < 11'

 # ´òÓ¡ÎļþµÄµÚÒ»ÐÐ £¨Ä£Äâ "head -1"£©
 awk 'NR>1{exit};1'

  # ´òÓ¡ÎļþµÄ×îºóÁ½ÐÐ £¨Ä£Äâ "tail -2"£©
 awk '{y=x "\n" $0; x=$0};END{print y}'

 # ´òÓ¡ÎļþµÄ×îºóÒ»ÐÐ £¨Ä£Äâ "tail -1"£©
 awk 'END{print}'

 # ´òÓ¡Æ¥ÅäÕýÔò±í´ïʽµÄÐÐ £¨Ä£Äâ "grep"£©
 awk '/regex/'

 # ´òÓ¡²»Æ¥ÅäÕýÔò±í´ïʽµÄÐÐ £¨Ä£Äâ "grep -v"£©
 awk '!/regex/'

 # ´òÓ¡Æ¥ÅäÕýÔò±í´ïʽµÄÇ°Ò»ÐУ¬µ«ÊDz»´òÓ¡µ±Ç°ÐÐ
 awk '/regex/{print x};{x=$0}'
 awk '/regex/{print (x=="" ? "match on line 1" : x)};{x=$0}'

 # ´òÓ¡Æ¥ÅäÕýÔò±í´ïʽµÄºóÒ»ÐУ¬µ«ÊDz»´òÓ¡µ±Ç°ÐÐ
 awk '/regex/{getline;print}'

 # ÒÔÈκÎ˳Ðò²éÕÒ°üº¬ AAA¡¢BBB ºÍ CCC µÄÐÐ
 awk '/AAA/; /BBB/; /CCC/'

 # ÒÔÖ¸¶¨Ë³Ðò²éÕÒ°üº¬ AAA¡¢BBB ºÍ CCC µÄÐÐ
 awk '/AAA.*BBB.*CCC/'

 # ´òÓ¡³¤¶È´óÓÚ64¸ö×Ö½ÚµÄÐÐ
 awk 'length > 64'

 # ´òÓ¡³¤¶ÈСÓÚ64¸ö×Ö½ÚµÄÐÐ
 awk 'length < 64'

 # ´òÓ¡´ÓÆ¥ÅäÕýÔòÆðµ½ÎļþĩβµÄÄÚÈÝ
 awk '/regex/,0'
 awk '/regex/,EOF'

 # ´òÓ¡Ö¸¶¨ÐÐÖ®¼äµÄÄÚÈÝ £¨8-12ÐÐ, °üÀ¨µÚ8ºÍµÚ12ÐУ©
 awk 'NR==8,NR==12'

 # ´òÓ¡µÚ52ÐÐ
 awk 'NR==52'
 awk 'NR==52 {print;exit}'          # ¶ÔÓÚ´óÎļþ¸üÓÐЧÂÊ

 # ´òÓ¡Á½¸öÕýÔòÆ¥Åä¼äµÄÄÚÈÝ £¨°üÀ¨ÕýÔòµÄÄÚÈÝ£©
 awk '/Iowa/,/Montana/'             # ´óСдÃô¸Ð


Ñ¡ÔñÐÔµÄɾ³ýijЩÐУº

 # ɾ³ýËùÓпհ×ÐÐ £¨ÀàËÆÓÚ "grep '.' "£©
 awk NF
 awk '/./'


ÖÂл£º

Ìرð¸Ðл Peter S. Tillier °ïÖúÎÒÍê³ÉÁËÒ»°æµÄFAQ¡£

¸ü¶àµÄÓï·¨Ö¸Á°üÀ¨ÓÃÎļþ½Å±¾À´Ê¹ÓÃawk£¬¿ÉÒԲο¼ÈçÏ£º

"sed & awk, 2nd Edition," by Dale Dougherty and Arnold Robbins
  O'Reilly, 1997
"UNIX Text Processing," by Dale Dougherty and Tim O'Reilly
  Hayden Books, 1987
"Effective awk Programming, 3rd Edition." by Arnold Robbins
  O'Reilly, 2001

ΪÁËÄÜ¿ª·¢awkµÄÇ¿´ó¹¦ÄÜ£¬¿ª·¢ÈËÔ±±ØÐëÖªµÀ "ÕýÔò±í´ïʽ"¡£¹ØÓÚÕýÔò
µÄÏêϸÌÖÂÛ£¬¿ÉÒԲ鿴
"Mastering Regular Expressions, 2d edition" by Jeffrey Friedl
   £¨O'Reilly, 2002£©¡£

UnixϵͳµÄÓû§°ïÖúÊÖ²á»áºÜÓÐÓ㬣¨³¢ÊÔ "man awk"£¬"man nawk"£¬"man regexp"
»òÕß°ïÖúÊÖ²áÀïÕýÔò±í´ïʽµÄÏà¹ØÕ½ڣ©£¬µ«ÊDz鿴°ïÖúÊÖ²á¿ÉÊÇÓÐÃûµÄÀ§ÄÑ:)
ÒòΪËûÃDz»ÊÇΪawkºÍÕýÔòµÄÐÂÊÖËùд£¬¶øÊÇ×÷ΪÓо­ÑéÈËÔ±µÄ²Î¿¼Êֲᡣ

ÔÚawk½Å±¾ÀïÃæʹÓà '\t'£ºÎªÁËʹÎĵµ±äµÃÇåÎú£¬ÎÒÃÇÔڽű¾ÀïʹÓÃÁ˱í´ïʽ'\t'
À´ÏÔʾһ¸öÖƱí·û £¨0x99£©¡£ËùÓÐawkµÄ°æ±¾£¬ÉõÖÁUNIXϵͳ7µÄ°æ±¾Ó¦¸ÃÄÜÈϳö
'\t'ÕâÖÖËõд¡£

#---Îļþ½áβ---
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20080426/5814c479/attachment-0002.htm 


More information about the ubuntu-zh mailing list