awk系列3--比较全面

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

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

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

     

关键字: