awk系列3--比较全面

发布时间:2019-08-17 08:51:07编辑:auto阅读(2092)

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

    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 

     

关键字