awk系列3--比较全面

在各大网站看到的 自己整理的


  1. awk学习实例 
  2. [root@localhost opt]# cat grade.txt  
  3. M.Tansley  05/99   48311   Green   8  40  44 
  4. J.Lulu     06/99   48317   green   9  24  26 
  5. P.Bunny    02/99   48      green   12  35  28 
  6. J.Troll    07/99   4842   Brown-3   12  26  26 
  7. L.Tansley  05/99   4712   Brown-2   12  30  28 
  8.  
  9.  
  10. [root@localhost opt]# awk '{if($4~/Brown/)print $0}' grade.txt  
  11. J.Troll    07/99   4842   Brown-3   12  26  26 
  12. L.Tansley  05/99   4712   Brown-2   12  30  28 
  13. [root@localhost opt]# awk '{if($3~/48/) print $0}' grade.txt  
  14. M.Tansley  05/99   48311   Green   8  40  44 
  15. J.Lulu     06/99   48317   green   9  24  26 
  16. P.Bunny    02/99   48      green   12  35  28 
  17. J.Troll    07/99   4842   Brown-3   12  26  26 
  18. [root@localhost opt]# awk '{if($3==48) print $0}' grade.txt  
  19. P.Bunny    02/99   48      green   12  35  28 
  20.  
  21. [root@localhost opt]# awk '{if($4 !~ /Brown/) print $0}' grade.txt  
  22. M.Tansley  05/99   48311   Green   8  40  44 
  23. J.Lulu     06/99   48317   green   9  24  26 
  24. P.Bunny    02/99   48      green   12  35  28 
  25.  
  26.  
  27. [root@localhost opt]# awk '{if($6<$7) print $0 "$1 try better at the next comp"}' grade.txt  
  28. M.Tansley  05/99   48311   Green   8  40  44$1 try better at the next comp 
  29. J.Lulu     06/99   48317   green   9  24  26$1 try better at the next comp 
  30. [root@localhost opt]# awk '{if($6<=$7) print $1}' grade.txt  
  31. M.Tansley 
  32. J.Lulu 
  33. J.Troll 
  34. [root@localhost opt]# awk '{if($6>$7) print $1}' grade.txt    
  35. P.Bunny 
  36. L.Tansley 
  37.  
  38. [root@localhost opt]# awk '{if($0 ~/[Gg]reen/) print $0 }' grade.txt  
  39. M.Tansley  05/99   48311   Green   8  40  44 
  40. J.Lulu     06/99   48317   green   9  24  26 
  41. P.Bunny    02/99   48      green   12  35  28 
  42.  
  43. [root@localhost opt]# awk '{if($1 ~/^...a/) print $0}' grade.txt  
  44. M.Tansley  05/99   48311   Green   8  40  44 
  45. L.Tansley  05/99   4712   Brown-2   12  30  28 
  46.  
  47. [root@localhost opt]# awk '$1 ~/^...a/' grade.txt  
  48. M.Tansley  05/99   48311   Green   8  40  44 
  49. L.Tansley  05/99   4712   Brown-2   12  30  28 
  50.  
  51. [root@localhost opt]# awk '{if ($0 ~/(Yellow|Brown)/) print $0}' grade.txt  
  52. J.Troll    07/99   4842   Brown-3   12  26  26 
  53. L.Tansley  05/99   4712   Brown-2   12  30  28 
  54.  
  55.  
  56. [root@localhost opt]# awk '/^P/' grade.txt    
  57. P.Bunny    02/99   48      green   12  35  28 
  58. [root@localhost opt]# awk '{if ($1=="P.Bunny" && $4=="Yellow")print $0}' grade.txt  
  59.  
  60. [root@localhost opt]# awk '{if ($4 ~/Brown/ || $4=="Yellow")print $0}' grade.txt                 
  61. J.Troll    07/99   4842   Brown-3   12  26  26 
  62. L.Tansley  05/99   4712   Brown-2   12  30  28 
  63.  
  64.  
  65.  
  66. [root@localhost opt]# awk 'END{print NR}' grade.txt  
  67. [root@localhost opt]# cat -n grade.txt  
  68.      1  M.Tansley  05/99   48311   Green   8  40  44 
  69.      2  J.Lulu     06/99   48317   green   9  24  26 
  70.      3  P.Bunny    02/99   48      green   12  35  28 
  71.      4  J.Troll    07/99   4842   Brown-3   12  26  26 
  72.      5  L.Tansley  05/99   4712   Brown-2   12  30  28 
  73.  
  74. [root@localhost opt]# awk '{print NF,NR,$0}END{print FILENAME}' grade.txt  
  75. 7 1 M.Tansley  05/99   48311   Green   8  40  44 
  76. 7 2 J.Lulu     06/99   48317   green   9  24  26 
  77. 7 3 P.Bunny    02/99   48      green   12  35  28 
  78. 7 4 J.Troll    07/99   4842   Brown-3   12  26  26 
  79. 7 5 L.Tansley  05/99   4712   Brown-2   12  30  28 
  80. grade.txt 
  81. [root@localhost opt]# awk '{if (NR>0 && $4 ~/Brown/) print $0}' grade.txt  
  82. J.Troll    07/99   4842   Brown-3   12  26  26 
  83. L.Tansley  05/99   4712   Brown-2   12  30  28 
  84.  
  85. [root@localhost opt]# echo "/usr/local/etc/rc.sybase" | awk -F"/" '{print $NF}' 
  86.  rc.sybase 
  87.   
  88.   
  89.  [root@localhost opt]# awk '{ name=$1;belts=$4;if(belts ~/Yellow/) print name  "is belt"  belts}' grade.txt  
  90. P.Bunnyis beltYellow 
  91. [root@localhost opt]# awk '{if($6<27)print $0}' grade.txt  
  92. J.Lulu     06/99   48317   green   9  24  26 
  93. J.Troll    07/99   4842   Brown-3   12  26  26 
  94. [root@localhost opt]# awk 'BEGIN { BASELINE="27"}{if($6<BASELINE)print $0}' grade.txt  
  95. J.Lulu     06/99   48317   green   9  24  26 
  96. J.Troll    07/99   4842   Brown-3   12  26  26 
  97. [root@localhost opt]# awk '{if($1=="M.Tansley") $6=$6-1;print $1,$6,$7}' grade.txt  
  98. M.Tansley 39 44 
  99. J.Lulu 24 26 
  100. P.Bunny 35 28 
  101. J.Troll 26 26 
  102. L.Tansley 30 28 
  103.  
  104. [root@localhost opt]# awk 'BEGIN{print "Name\t Difference"}{if ($6<$7) {$8=$7-$6; print $1,$8}}' grade.txt   
  105. Name     Difference 
  106. M.Tansley 4 
  107. J.Lulu 2 
  108.  
  109. [root@localhost opt]# awk '(tot+=$6);END{print "club student total points :" tot}' grade.txt  
  110. M.Tansley  05/99   48311   Green   8  40  44 
  111. J.Lulu     06/99   48317   green   9  24  26 
  112. P.Bunny    02/99   48      Yellow   12  35  28 
  113. J.Troll    07/99   4842   Brown-3   12  26  26 
  114. L.Tansley  05/99   4712   Brown-2   12  30  28 
  115. club student total points :155 
  116. [root@localhost opt]# awk '{(tot+=$6)};END{print "club student total points :" tot}' grade.txt  
  117. club student total points :155 
  118.  
  119.  
  120.  
  121. [root@localhost opt]# ls -l | awk '/^[^d]/ {print $9"\t"$5} {tot+=$5}END{print "total KB:" tot}' 
  122.  
  123. 111     43 
  124. A.txt   43 
  125. B.txt   36 
  126. C.txt   36 
  127. grade.txt       231 
  128. mian.sh 257 
  129. sou.sh  180 
  130. test.sh 151 
  131. total KB:5073 
  132.  
  133.  
  134.  
  135.  
  136. [root@localhost opt]# cat grade.txt  
  137. M.Tansley  05/99   48311  Green    8   40  44 
  138. J.Lulu     06/99   48317  green    9   24  26 
  139. P.Bunny    02/99   48     Yellow   12  35  28 
  140. J.Troll    07/99   4842   Brown-3  12  26  26 
  141. L.Tansley  05/99   4712   Brown-2  12  30  28 
  142. [root@localhost opt]# awk 'gsub(/4842/,4899) {print $0}' grade.txt  
  143. J.Troll    07/99   4899   Brown-3  12  26  26 
  144. [root@localhost opt]# awk 'BEGIN{print index("Bunny","ny")}' grade.txt  
  145. [root@localhost opt]# awk '$1=="J.Troll" {print length($1)" " $1}' grade.txt  
  146. 7 J.Troll 
  147. [root@localhost opt]# awk 'BEGIN{print length("A FEW GOOD MEN"}'  
  148. awk: BEGIN{print length("A FEW GOOD MEN"} 
  149. awk:                                    ^ syntax error 
  150. [root@localhost opt]# awk 'BEGIN{print length("A FEW GOOD MEN")}'  
  151. 14 
  152.  
  153. [root@localhost opt]# awk 'BEGIN {print match("ANCD",/d/)}' 
  154. [root@localhost opt]# awk 'BEGIN {print match("ANCD",/C/)}' 
  155. [root@localhost opt]# awk '$1=="J.Lulu"  {print match($1,"u")}' grade.txt   
  156. [root@localhost opt]# awk 'BEGIN {print split("123#456#789",myarray,"#")}' 
  157. [root@localhost opt]# awk '$1=="J.Troll" sub (/26/,"29",$0)' grade.txt  
  158. [root@localhost opt]# awk '$1=="L.Tansley" {print substr($1,1,5)}' grade.txt  
  159. L.Tan 
  160. [root@localhost opt]# awk '{print substr($1,3)}' grade.txt  
  161. Tansley 
  162. Lulu 
  163. Bunny 
  164. Troll 
  165. Tansley 
  166. [root@localhost opt]# awk 'BEGIN{ STR="A FEW GOOD MEN"}END{print substr(STR,7)}' grade.txt  
  167. GOOD MEN 
  168.  
  169.  
  170.  
  171.  
  172.  
  173. [root@localhost opt]# echo "Stand-by" | awk '{print length($0)}'  
  174. [root@localhost opt]# str="mydoc.txt" 
  175. [root@localhost opt]# echo $str | awk '{print substr($str,1,5)}' 
  176. mydoc 
  177.  
  178. [root@localhost opt]# awk 'BEGIN{print "\n\May\tday\n\n\May     \104\141\171"}' awk: warning: escape sequence `\M' treated as plain `M' 
  179.  
  180. May     day 
  181.  
  182. May     Day 
  183.  
  184.  
  185. root@client1 ~]# netstat -ntlp | awk  '$0 ~/tcp/{gsub(/:::/,":")split($4,a,":");print a[2]}' 
  186. 807 
  187. 111 
  188. 631 
  189. 25 
  190. 22 
  191.  
  192.  
  193. root@master opt]# ls -l | awk '/^[^d]/ {print $9"\t"$5;tot+=$5} END {print "total KB:" tot}' 
  194.      
  195. grade.txt   173 
  196. t1  6 
  197. vc.sql  1597 
  198. total KB:1776 
  199. [root@master opt]# ls -l 
  200. total 32 
  201. -rw-r--r-- 1 root root  173 Sep 12 00:29 grade.txt 
  202. -rw-r--r-- 1 root root    6 Sep  6 19:39 t1 
  203. drwxr-xr-x 2 root root 4096 Sep  6 19:47 test 
  204. -rw-r--r-- 1 root root 1597 Sep  9 23:22 vc.sql 
  205.  
  206.  
  207. [root@master opt]# awk 'BEGIN{print split("123,456,789",may,",");for(i in may) {print i,may[i]}}' 
  208. 1 123 
  209. 2 456 
  210. 3 789 
  211.  
  212.  
  213. root@master opt]# awk '{if($1=="J.Troll") sub(/26/,"29",$0);print $0}' grade.txt  
  214. M.Tans 5/99 48311 Green 8 40 44 
  215. J.Lulu 06/99 48317 green 9 24 26 
  216. P.Bunny 02/99 48 Yellow 12 35 28 
  217. J.Troll 07/99 4842 Brown-3 12 29 26 
  218. L.Tansl 05/99   4712 Brown-2 12 30 28 
  219.  
  220. awk  
  221. 如题 
  222. [root@test ~]# cat a.log 
  223. 1 a 
  224. 1 b 
  225. 2 c 
  226. 2 d 
  227. 2 e 
  228. 3 f 
  229. 变成如下格式 
  230. [root@master opt]# cat a.log |awk '{a[$1]=a[$1]? a[$1]"," $2:$2}END{for(i in a)print i,a[i]}' 
  231. 1 a,b 
  232. 2 c,d,e 
  233. 3 f 
  234.  
  235. ########### 
  236. file: 
  237. a001 1 100 
  238. a001 2 700 
  239. a002 1 500 
  240. a002 2 100 
  241. a003 1 100 
  242.  
  243.  
  244. 形成: 
  245. a001  2 600 
  246. a002  1 400 
  247. a003  1 100 
  248.  
  249. sort -k3 file|awk '{a[$1]=$1FS$2;b[$1]=$3-b[$1]}END{for(i in a)print a[i],b[i]}' 
  250. a001 2 600 
  251. a002 1 400 
  252. a003 1 100 
  253.  
  254. [root@master opt]# awk 'NR>1{if(x==$1){if($3>z){$3=$3-z}else{$3=z-$3;$2=y}}else{print x,y,z}}{ x=$1;y=$2;z=$3}' file 
  255. a001 2 600 
  256. a002 1 400 
  257. ############### 
  258.  
  259.  
  260.  
  261. vim infile 
  262. t lines init 
  263. a'101-1 ' b   6  20.00  15.00 '101-1  15.056  0  2 ' 15.056      0      0 
  264.   path=no 
  265.     12275        dwt=#.00   ttf=4 
  266.      7604 
  267.      9691 dwt=.50 
  268.     12512        dwt=#.00 
  269.      9692 
  270.     12511 
  271.      6374 
  272.      6373 
  273.      7602 dwt=.50 
  274.      7905        dwt=#.00 
  275.      7906 
  276.      9681 
  277.       
  278. 需要达到的效果是:凡事以字母开头的比如t lines init a'101-1 '都原封不动的print出来 
  279. 然后,凡是本行内含有dwt=#0.00的,该行的下一行中的数字+100000 
  280. 1 [root@master opt]# awk '/dwt=#.00/{print;getline;printf "%9s\n" , $NF+100000;next}1' infile 
  281. 2 awk '/dwt=#.00/{print;getline;$1+=100000}1' infile 
  282. ==================================================================================================== 
  283. [root@L ~]# cat testfile 
  284. lehih_0006->lehih_0004 
  285. teyou_0013->teyou_0001 
  286. teyou_0014->teyou_0001 
  287. teyou_0016->teyou_0001 
  288. teyou_0017->teyou_0002 
  289. teyou_0019->teyou_0002 
  290. teyou_0018->teyou_0002 
  291.  
  292. 以 "->"为FS 如何把第一个字段的内容放入一个awk数组中? 或者说 如何往awk数组中添加元素? 
  293. [root@master opt]# awk -F"->" '{a[NR]=$1}END{for(i in a)print a[i]}' tfile  
  294. teyou_0016 
  295. teyou_0017 
  296. teyou_0019 
  297. teyou_0018 
  298. lehih_0006 
  299. teyou_0013 
  300. teyou_0014 
  301.  
  302.  
  303.  
  304. ----------------------------------------------------------- 
  305. 统计文件中个字符或字符串个数 
  306.  
  307. [root@L ~]# cat file 
  308. A B C S 
  309. C D E A 
  310. B S D A 
  311. D B S A 
  312. E S C D 
  313. S A B D 
  314.  
  315. 1 awk '{for(i=1;i<=NF;i++)array[$i]++} END{for(k in array)printf("%s\t%d\n",k,array[k])}' file 
  316. A       5 
  317. B       4 
  318. C       3 
  319. D       5 
  320. E       2 
  321. S       5 
  322.  
  323. 2 [root@master opt]# awk '{for(i=1;i<=NF;i++)array[$i]++} END{for(k in array)print(k,array[k])}' file1 
  324. A 5 
  325. B 4 
  326. C 3 
  327. D 5 
  328. E 2 
  329. S 5 
  330.  
  331. --------------------------------------------------------------------------------------------- 
  332.  
  333. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 
  334. 1.txt 
  335. 1  4 
  336. 2 39 
  337. 3 58 
  338.  
  339.  
  340. 2.txt 
  341. 1 34 
  342. 2 76 
  343. 3 60 
  344. 现在我想要的结果是: 
  345. 1 4 34 
  346. 2 39 76 
  347. 3 58 60 
  348.  
  349. [root@master opt]# awk 'FNR==NR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 2.txt 1.txt  
  350. 1  4 34 
  351. 2 39 76 
  352. 3 58 60 
  353. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 
  354.  
  355.  
  356. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  357. 文件内容如下: 
  358. 想要的结果如下: 
  359. 123 
  360. 45 
  361. 6789 
  362.  
  363. [root@master opt]# awk -vRS=# -vOFS=  'NF+=0' awk  
  364. 123 
  365. 45 
  366. 6789 
  367. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  368.  
  369.  
  370. $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
  371. 打印文件的第二列到最后一列 
  372. [root@master opt]# cat grade.txt  
  373. M.Tans 5/99 48311 Green 8 40 44 
  374. J.Lulu 06/99 48317 green 9 24 26 
  375. P.Bunny 02/99 48 Yellow 12 35 28 
  376. J.Troll 07/99 4842 Brown-3 12 26 26 
  377. L.Tansl 05/99   4712 Brown-2 12 30 28 
  378.  
  379. [root@master opt]# awk '{for(i=2;i<=7;i++)printf ($i"\t");printf("\n")}' grade.txt  
  380. 5/99    48311   Green   8   40  44   
  381. 06/99   48317   green   9   24  26   
  382. 02/99   48  Yellow  12  35  28   
  383. 07/99   4842    Brown-3 12  26  26   
  384. 05/99   4712    Brown-2 12  30  28   
  385.  
  386. [root@master opt]# awk '{for(i=2;i<=NF;i++)printf ($i"\t");printf("\n")}' grade.txt  
  387. 5/99    48311   Green   8   40  44   
  388. 06/99   48317   green   9   24  26   
  389. 02/99   48  Yellow  12  35  28   
  390. 07/99   4842    Brown-3 12  26  26   
  391. 05/99   4712    Brown-2 12  30  28   
  392.  
  393.  
  394. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
  395. 我想用shell 提取字符串中的数据,原始数据如下 
  396. <li><a href="#" key="201112/27/C.QhlYzQ44tTHDccKeQ"   tag="0" > </a></li> 
  397. <li><a href="#" key="201112/27/C.QhlYzQ44tTHDccKeC"   tag="1" > </a></li> 
  398. <li><a href="#" key="201112/27/C.QhlYzQ44tTHDccKeW"  tag="2" > </a></li> 
  399. <li><a href="#" key="201112/27/C.QhlYzQ44tTHDccKeU"   tag="3" > </a></li> 
  400.  
  401. 提取后呈现 
  402.  
  403. key   201112/27/C.QhlYzQ44tTHDccKeQ     tag  0 
  404. key   201112/27/C.QhlYzQ44tTHDccKeC     tag  1 
  405. key   201112/27/C.QhlYzQ44tTHDccKeW    tag  2 
  406. key   201112/27/C.QhlYzQ44tTHDccKeU     tag  3 
  407.  
  408. [root@master opt]# awk '{ s=$3" "$4;gsub(/=|\"/," ",s);print s}' data  
  409. key  201112/27/C.QhlYzQ44tTHDccKeQ  tag  0  
  410. key  201112/27/C.QhlYzQ44tTHDccKeC  tag  1  
  411. key  201112/27/C.QhlYzQ44tTHDccKeW  tag  2  
  412. key  201112/27/C.QhlYzQ44tTHDccKeU  tag  3  
  413. [root@master opt]# awk -F "[=\" ]+" '{print $4,$5,$6,$7}' data  
  414. key 201112/27/C.QhlYzQ44tTHDccKeQ tag 0 
  415. key 201112/27/C.QhlYzQ44tTHDccKeC tag 1 
  416. key 201112/27/C.QhlYzQ44tTHDccKeW tag 2 
  417. key 201112/27/C.QhlYzQ44tTHDccKeU tag 3 
  418. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
  419.  
  420.  
  421.  
  422. (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 
  423. temp.dat 
  424. 130 2008 
  425. 2223.08 0.2814 200805092200 79200 20070815032657 
  426. 133 2008 
  427. 2184.69 0.5009 200805121400 50400 20071226232905 
  428. 133 2008 
  429. 1359.88 0.2354 200805122000 72000 20081105042440 
  430. 122 2008 
  431. 2480.08 0.2035 200805010100 3600 20090102084023 
  432. 133 2008 
  433. 1828.50 0.2576 200805122000 72000 20090105025641 
  434.  
  435. 只输出奇数行 
  436. [root@master opt]# awk '{print $0;getline}' temp.dat  
  437. 130 2008 
  438. 133 2008 
  439. 133 2008 
  440. 122 2008 
  441. 133 2008 
  442.  
  443. [root@client1 ~]# seq 10 | awk 'i=!(i++)' 
  444. [root@client1 ~]# seq 10 | awk 'i++%2' 
  445. 10 
  446. [root@client ~]# seq 10| awk '{getline;print $0}'  
  447. 10 
  448.  
  449. seq 100  | awk 'i=!i' 
  450. 这条命令能显示1到100之间的奇数,看了不理解,求解释 
  451.  
  452. 只输出偶数行 
  453. [root@master opt]# awk '{getline;print $0}' temp.dat  
  454. 2223.08 0.2814 200805092200 79200 20070815032657 
  455. 2184.69 0.5009 200805121400 50400 20071226232905 
  456. 1359.88 0.2354 200805122000 72000 20081105042440 
  457. 2480.08 0.2035 200805010100 3600 20090102084023 
  458. 1828.50 0.2576 200805122000 72000 20090105025641 
  459.  
  460. [root@master opt]# awk 'i++%2' temp.dat  
  461. 2223.08 0.2814 200805092200 79200 20070815032657 
  462. 2184.69 0.5009 200805121400 50400 20071226232905 
  463. 1359.88 0.2354 200805122000 72000 20081105042440 
  464. 2480.08 0.2035 200805010100 3600 20090102084023 
  465. 1828.50 0.2576 200805122000 72000 20090105025641 
  466.  
  467. 是我说的不太清楚,我想利用奇数行的第一列,和偶数行,最终一奇一偶两行输出一行 
  468. [root@master opt]# awk '{printf NR%2?$1 FS :$0 RS}' temp.dat  
  469. 130 2223.08 0.2814 200805092200 79200 20070815032657 
  470. 133 2184.69 0.5009 200805121400 50400 20071226232905 
  471. 133 1359.88 0.2354 200805122000 72000 20081105042440 
  472. 122 2480.08 0.2035 200805010100 3600 20090102084023 
  473. 133 1828.50 0.2576 200805122000 72000 20090105025641 
  474. ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 
  475.  
  476. =================================================================== 
  477. 有文件,比如 
  478.  
  479.     a 
  480.     b 
  481.     c 
  482.     d 
  483.     e 
  484.     f 
  485.     g 
  486.  
  487. 复制代码 
  488. 现在要生成如下 
  489.  
  490.     a,b,c,d,e,f,g 
  491.  
  492. 复制代码 
  493. 我现在 
  494.  
  495.     [root@nagios ~]# awk 'BEGIN{ ORS=","}{print $0}' test 
  496.     a,b,c,d,e,f,g, 
  497.  
  498. [root@master opt]# awk  'BEGIN{ RS="";OFS=","}NF+=0' ta 
  499. a,b,c,d,e,f,g 
  500. [root@master opt]# awk -vOFS="," -vRS="" 'NF+=0' ta 
  501. a,b,c,d,e,f,g 
  502. ==================================================================== 
  503.  
  504.  
  505. .................................................................... 
  506. 文本: 
  507. hash:0af1403ac9021973529b723cf9479633 date:7.6.0.2001 
  508. hash:0af1403ac9021973529b723cf9479633 date:7.6.0.2001 
  509. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2001 
  510. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2001 
  511. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2001 
  512. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2001 
  513. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2001 
  514. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2001 
  515. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2001 
  516. hash:f80cf7f9629c91aaa899e2256a6b4dac date:7.6.0.2009 
  517.  
  518.  
  519. 根据date统计hash的个数,重复的只算一个,得到结果: 
  520. 7.6.0.2001 2 
  521. 7.6.0.2009 1 
  522. awk -F"[ :]" '!a[$2,$NF]++{b[$NF]++}END{for(i in b)print i,b[i]}' file 
  523. .................................................................... 
  524.  
  525. ************************************************ 
  526. 记录平时需要用到的awk命令1 ) 
  527. 删除空行 
  528. 1 awk NF 
  529. 2 awk '!/^$/' 
  530.  
  531. 去掉重复行 
  532. awk '!a[$1]++'    去除第一列重复行 
  533.  
  534.      
  535. ?????????????????????????????????? 
  536. str=" 1 2 3 4 5 6 7 8 9 " 
  537.  
  538. 打印成如下格式: 
  539.  
  540. 1 2 3 
  541. 4 5 6 
  542. 7 8 9 
  543.  
  544. [root@master opt]# echo "11_22_33_44_55_66_77_88"_99|awk -vRS="_" 'ORS=NR%3?" ":"\n"' 
  545. 11 22 33 
  546. 44 55 66 
  547. 77 88 99 
  548.  
  549. [root@master opt]# echo "1 2 3 4 5 6 7 8 9"|awk -vRS=" " 'ORS=NR%3?" ":"\n"' 
  550. 1 2 3 
  551. 4 5 6 
  552. 7 8 9 
  553. ??????????????????????????????????   
  554.  
  555.  
  556. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
  557. [root@master opt]# cat atest  
  558. a,b,c,d 
  559. e,f,g,h 
  560. i,j,k,l 
  561. [root@master opt]# awk     -vRS="[,\n]"  'NF+=0' atest  
  562.  
  563. [root@master opt]# cat a1  
  564. a,b,c,d,e,f,g,h,i,j,k 
  565. [root@master opt]# awk     -vRS=","  'NF+=0' a1 
  566. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
  567.  
  568.  
  569. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
  570. etstat 监控端口查出的状态进行IP 和状态的统计,并排序 
  571.  
  572. tcp        0      0 127.0.0.1:31001          10.156.177.88:3391          TIME_WAIT    
  573. tcp        0      0 127.0.0.1:31001          10.165.176.249:1702         TIME_WAIT    
  574. tcp        0      0 127.0.0.1:31001          10.113.179.124:2805         TIME_WAIT    
  575. tcp        0      0 127.0.0.1:31001          10.111.178.157:1292         ESTABLISHED 
  576. tcp        0      0 127.0.0.1:31001          10.38.178.189:1380          TIME_WAIT    
  577.  
  578.  
  579. 期望得到的结果为: 
  580.  
  581.   ip(第五列)     状态               出现次数 
  582. 10.156.177.88    TIME_WAIT         1 
  583.  
  584. [root@master opt]# cat file3 
  585. tcp        0      0 127.0.0.1:31001          10.156.177.88:3391          TIME_WAIT    
  586. tcp        0      0 127.0.0.1:31001          10.165.176.249:1702         TIME_WAIT    
  587. tcp        0      0 127.0.0.1:31001          10.113.179.124:2805         TIME_WAIT    
  588. tcp        0      0 127.0.0.1:31001          10.111.178.157:1292         ESTABLISHED 
  589. tcp        0      0 127.0.0.1:31001          10.38.178.189:1380          TIME_WAIT  
  590. [root@master opt]# awk '{split($5,a,":");b[a[1]" "$6]++}END{for(i in b)print i,b[i]}' file3  
  591. 10.38.178.189 TIME_WAIT 1 
  592. 10.113.179.124 TIME_WAIT 1 
  593. 10.165.176.249 TIME_WAIT 1 
  594. 10.156.177.88 TIME_WAIT 1 
  595. 10.111.178.157 ESTABLISHED 1 
  596. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
  597.  
  598. MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 
  599. 统计没歌词出现的次数 
  600. [root@master opt]# cat word  
  601. data we me and you 
  602. data we me and you 
  603. data we me and you 
  604. data we me and you 
  605. data we me and you 
  606. data 
  607. we me and you 
  608. [root@master opt]# awk '{for(i=1;i<=NF;i++)a[$i]++}END{for(i in a)print i,a[i]}' word  
  609. me 6 
  610. data 6 
  611. and 6 
  612. you 6 
  613. we 6 
  614. MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 
  615.  
  616.  
  617.  
  618. 实现如下格式 
  619. [root@client1 html]# echo "1,2,3,4,5,6"|awk -F ","   '{for(i=2;i<=NF;i++) print $1","$i}' 
  620. 1,2 
  621. 1,3 
  622. 1,4 
  623. 1,5 
  624. 1,6 
  625.  
  626.  
  627. ?: 运算符解释 
  628. 条件成立取?后面的值 即条件为真  为假取:后面的值  0为假,则!0即为真 
  629. [gaoming@localhost ~]$ awk 'BEGIN{ a="b";print a=="b"?"ok":"err";}' 
  630. ok  
  631.  
  632.  
  633.  
  634. 文件内容如下 
  635. [root@client1 tmp]# cat b.txt  
  636. 20121001  testing 
  637. 20121001  test.192.168.0.1 
  638. 20121001  time:20 
  639.  
  640. 实现格式如下 
  641. 20121001  192.168.0.1,20 
  642.  
  643. [root@client1 tmp]# cat b.txt | awk 'NR>1{a[$1]=a[$1]? a[$1]"," $2:$2}END{for (i in a)print i,a[i]}' | sed 's/[a-z]//g' 
  644. 20121001 .192.168.0.1,:20 
  645.  
  646. awk '{sub(/[^0-9]+/,"",$2);if($2~/[0-9]/)a[$1]=a[$1]?a[$1]", "$2:$2}END{for(i in a)print i,a[i]}'  file 
  647.  
  648.  
  649. 解释贴经典啊 
  650. http://bbs.chinaunix.net/thread-3769891-2-12.html 
  651.  
  652.  
  653.  
  654.  
  655.  
  656. [root@test ~]# cat a.log  
  657. 1 a 
  658. 1 b 
  659. 2 c 
  660. 2 d 
  661. 2 e 
  662. 3 f 
  663.  
  664.  
  665. [root@test ~]# cat a.log |awk '{a[$1]=a[$1] ?a[$1]","$2:$2}END{for(i in a)print i,a}' 
  666. 1 a,b 
  667. 2 c,d,e 
  668. 3 f 
  669.  
  670. 判断是对 a[$1]的判断,而不是 a[$1]=a[$1]的判断。 
  671. 01.第一行时, a[$1]为空为假,所以, 执行a[$1]=a[$1]?a[$1] "," $2:$2 后, a[$1]为$2, 即a[1]=a. 
  672.  
  673. 02. 
  674.  
  675. 03.第二行时,a[$1]不为空为真,所以,执行a[$1]=a[$1]?a[$1] "," $2:$2 后, a[$1]为原来的a[$1] “," $2,即a[1]为 a,b 
  676.  
  677.  
  678.  
  679.  
  680. 如题http://bbs.chinaunix.net/thread-3763442-1-22.html 
  681. A:name 
  682. B:number 
  683. C:123456 
  684. D:654321 
  685. E: 0721    00:00:00 
  686.  
  687. [ :]匹配空格或: 
  688. +  匹配前面的子表达式 1 次或多次 
  689. [root@client1 tmp]# awk -F '[ :]+' '{print $2}' eg  
  690. name 
  691. number 
  692. 123456 
  693. 654321 
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700. 如题http://bbs.chinaunix.net/thread-3760162-1-26.html 
  701. -rw-a--     2.0 fat     3156 b- defN 11-Jul-12 11:11 WEB-INF/classes/com/channelsoft/helpdesk/business/action/CallUpSgAction.class 
  702. -rw-a--     2.0 fat     8632 b- defN 11-Jul-12 10:59 WEB-INF/classes/com/channelsoft/helpdesk/business/util/SGClient.class 
  703. -rw-a--     2.0 fat    16720 t- defN 11-Jul-12 10:26 WEB-INF/classes/struts-business.xml 
  704. -rw-a--     2.0 fat        4 t- stor 11-Jul-12 11:54 svn_version.txt 
  705.  
  706.  
  707. 如上信息  可以将上面信息当成file 
  708. awk 怎么能获取这样的结果: 
  709.  
  710. CallUpSgAction.class 
  711. SGClient.class 
  712. struts-business.xml 
  713. svn_version.txt 
  714.  
  715. 也就是说,获取每一行最后的那个文件名? 
  716. [root@client1 tmp]# awk -F"[ /]" '{print $NF}' file1 
  717. CallUpSgAction.class 
  718. SGClient.class 
  719. struts-business.xml 
  720. svn_version.txt 
  721.  
  722.  
  723.  
  724. http://bbs.chinaunix.net/thread-1679416-1-30.html 
  725.  
  726.  
  727. [root@localhost test]# cat t1 
  728. a 1 
  729. b 45 
  730. c    90089809 
  731. d   dsd 
  732.  
  733. [root@localhost test]# awk '{printf "%s",$1}' t1 
  734. abcd 
  735.  
  736.  
  737. 如题 得到如下结果 
  738. [root@client1 tmp]# cat port  
  739. port,0 
  740. mac,0017.0850.1530,ip-address,192.168.0.199 
  741. port,1 
  742. mac,0011.2557.972F,ip-address,192.168.0.166 
  743. port,2 
  744. mac,4016.9F0C.BB39,ip-address,192.168.0.25 
  745. mac,0013.02A3.F918,ip-address,192.168.0.27 
  746. mac,CC52.AF28.D6EC,ip-address,192.168.0.74 
  747. [root@client1 tmp]# awk '/^port,/{ p=$0;next}{print $0","p}' port  
  748. mac,0017.0850.1530,ip-address,192.168.0.199,port,0 
  749. mac,0011.2557.972F,ip-address,192.168.0.166,port,1 
  750. mac,4016.9F0C.BB39,ip-address,192.168.0.25,port,2 
  751. mac,0013.02A3.F918,ip-address,192.168.0.27,port,2 
  752. mac,CC52.AF28.D6EC,ip-address,192.168.0.74,port,2 
  753. http://bbs.chinaunix.net/thread-3705860-1-62.html 

 

本文出自 “十年一刻” 博客,请务必保留此出处http://liveforlinux.blog.51cto.com/3337218/1056484