我的编程空间,编程开发者的网络收藏夹
学习永远不晚

awk系列3--比较全面

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

awk系列3--比较全面

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

awk系列3--比较全面

在各大网站看到的 自己整理的awk学习实例 [root@localhost opt]# cat grade.txt  M.Tansley  05/99   48311   Green   8  40  44 J.Lulu     06/99
2023-01-31

比较全面的DHCP配置

以下是一个全面的DHCP(动态主机配置协议)配置示例:```option domain-name "example.com";option domain-name-servers 8.8.8.8, 8.8.4.4;default-lease
2023-09-13

比较全面的MySQL优化参考

本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了。1、硬件层相关优化1.1、CPU
2022-05-23

阿里云服务器系列比较好的有哪些?

本文将介绍阿里云服务器系列中比较受欢迎的产品,并对其特点和优势进行详细介绍。无论是个人用户还是企业用户,都可以从这些产品中找到适合自己的解决方案。1.ECS(弹性计算服务)阿里云ECS是一种基于云计算技术的弹性计算服务,提供可扩展的计算能力。ECS具有高性能、可靠性和安全性等特点,适用于各种应用场景,如网站托管、
阿里云服务器系列比较好的有哪些?
2024-01-20

软考系规和高项难度对比(附四个方面的比较)

全国计算机技术与软件专业技术资格(水平)考试的报名人数近些年来越来越多,因为取得证书即可与职称直接对应,无需评审。而软考分为初级、中级、高级三个级别。在高级项目中,系规和高项都颇受关注,下面小编来讲解一番软考系规和高项难度对比。
软考系规和高项难度对比(附四个方面的比较)
2024-08-31

比较详细全面的织梦DEDECMS目录结构说明

根目录 /dede 管理后台目录 /freelist 自由文档列表生成目录 /html 默认文章生成目录 /include 程序核心文件目录 /member 会员管理目录 /plus 插件及辅助功能目录 /setup 安装目录 /speci
2022-06-12

阿里云数据库服务价格全面解读与比较

随着互联网的发展和数据量的不断增大,企业对数据库的需求也日益增加。而作为国内领先的云计算服务商,阿里云数据库服务备受关注。本文将详细解读阿里云数据库服务的价格,并与市场上其他主要数据库服务商进行比较,以帮助读者更好地了解阿里云数据库服务的优势和价值。正文:阿里云数据库服务提供多种类型的服务,包括关系型数据库、No
阿里云数据库服务价格全面解读与比较
2023-12-17

操作系统命令行界面(CLI)与图形用户界面(GUI)的比较

操作系统命令行界面(CLI)和图形用户界面(GUI)是两种主要的用户界面类型,各有优缺点。在本文中,我们将比较 CLI 和 GUI,以帮助您确定哪种界面最适合您的需求。
操作系统命令行界面(CLI)与图形用户界面(GUI)的比较
2024-02-22

阿里云服务器s6和t6哪个好用?全面比较解析

阿里云服务器s6和t6是阿里云推出的两种不同类型的服务器,都具有较高的性能和稳定性。那么,哪一种更好用呢?本文将对此进行全面比较解析。阿里云服务器s6和t6都是阿里云的高性能服务器,它们的主要区别在于处理器、内存和存储。处理器方面,阿里云服务器s6和t6都采用了最新的IntelXeonE5-2600系列处理器,性
阿里云服务器s6和t6哪个好用?全面比较解析
2023-12-16

GNS3全面详解系列-GNS3的前世今生

前言:我和“她”认识已经有十个春秋,3650个日起日落。5年前因为对她的“误会”我们各奔东西,彼此擦肩而错过;5年后由于个人发展原因再次与她重逢。最近由于工作项目上的需要,有了和她朝夕相处的机会,潜滋暗长,日久生情,于是开始萌芽了打算为她写
2023-01-31

Windows系列的远程桌面连接操作大全

在Windows的世界中不论你是普通的桌面用户,还是企业级的用户,都有一项功能,那就是远程桌面连接。不论是在WINDOWS 2000 SERVER,WINDOWS XP、WINDOWS 2003、WINDOWS VISTA还是在最新的Win
2023-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录