{"id":407,"date":"2016-05-19T22:29:04","date_gmt":"2016-05-19T14:29:04","guid":{"rendered":"http:\/\/owemeawe.com\/?p=407"},"modified":"2016-09-11T15:23:47","modified_gmt":"2016-09-11T15:23:47","slug":"awk%e5%91%bd%e4%bb%a4%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/peloo.net\/?p=407","title":{"rendered":"awk\u547d\u4ee4\u8be6\u89e3"},"content":{"rendered":"<p><strong>\u4e00\u3001\u7b80\u4ecb<\/strong><\/p>\n<p>&nbsp;&nbsp;&nbsp; Linux\u4e0b\u5fc5\u987b\u638c\u63e1\u7684\u4e09\u5927\u6587\u672c\u5904\u7406\u5de5\u5177\uff1a<\/p>\n<p>1&nbsp; grep: \u6587\u672c\u8fc7\u6ee4\u5668<\/p>\n<p>2&nbsp; sed\uff1a\u6d41\u7f16\u8f91\u5668<\/p>\n<p>3&nbsp; awk: \u62a5\u544a\u751f\u6210\u5668<\/p>\n<p>AWK\u662f\u4ee5 a.k.a. Aho, Kernighan and Weinberger\u4e09\u4f4d\u5f00\u53d1\u8005\u547d\u540d\uff0c\u5b83\u662f\u4e2a\u5f3a\u5927\u7684\u62a5\u544a\u751f\u6210\u5668\uff0c\u53ea\u6709\u4f60\u6ca1\u60f3\u5230\u7684\uff0c\u6ca1\u6709\u5b83\u505a\u4e0d\u5230\u7684\u3002<\/p>\n<p>&nbsp;\u57fa\u672c\u7528\u6cd5\uff1a<\/p>\n<p># awk [options] &#039;script&#039; file1 file2, ...<\/p>\n<p># awk [options] &#039;PATTERN { action }&#039; file1 file2, ...<\/p>\n<p>&nbsp;&nbsp;&nbsp; print, printf<\/p>\n<p><strong><br \/><\/strong><\/p>\n<p><strong>\u4e8c\u3001\u5177\u4f53\u7528\u6cd5<\/strong><\/p>\n<p>1. \u6a21\u5f0f\u548c\u64cd\u4f5c<\/p>\n<p>awk\u811a\u672c\u662f\u7531\u6a21\u5f0f\u548c\u64cd\u4f5c\u7ec4\u6210\u7684\uff1a<\/p>\n<p>pattern {action} \u5982$ awk &#039;\/root\/&#039; test\uff0c\u6216$ awk &#039;$3 &lt; 100&#039; test\u3002<\/p>\n<p>\u4e24\u8005\u662f\u53ef\u9009\u7684\uff0c\u5982\u679c\u6ca1\u6709\u6a21\u5f0f\uff0c\u5219action\u5e94\u7528\u5230\u5168\u90e8\u8bb0\u5f55\uff0c\u5982\u679c\u6ca1\u6709action\uff0c\u5219\u8f93\u51fa\u5339\u914d\u5168\u90e8\u8bb0\u5f55\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e00\u4e2a\u8f93\u5165\u884c\u90fd\u662f\u4e00\u6761\u8bb0\u5f55\uff0c\u4f46\u7528\u6237\u53ef\u901a\u8fc7RS\u53d8\u91cf\u6307\u5b9a\u4e0d\u540c\u7684\u5206\u9694\u7b26\u8fdb\u884c\u5206\u9694\u3002<\/p>\n<p>1.1. \u6a21\u5f0f<\/p>\n<p>\u6a21\u5f0f\u53ef\u4ee5\u662f\u4ee5\u4e0b\u4efb\u610f\u4e00\u4e2a\uff1a<\/p>\n<p>\/\u6b63\u5219\u8868\u8fbe\u5f0f\/\uff1a\u4f7f\u7528\u901a\u914d\u7b26\u7684\u6269\u5c55\u96c6\u3002<\/p>\n<p>\u5173\u7cfb\u8868\u8fbe\u5f0f\uff1a\u53ef\u4ee5\u7528\u4e0b\u9762\u8fd0\u7b97\u7b26\u8868\u4e2d\u7684\u5173\u7cfb\u8fd0\u7b97\u7b26\u8fdb\u884c\u64cd\u4f5c\uff0c\u53ef\u4ee5\u662f\u5b57\u7b26\u4e32\u6216\u6570\u5b57\u7684\u6bd4\u8f83\uff0c\u5982$2&gt;%1\u9009\u62e9\u7b2c\u4e8c\u4e2a\u5b57\u6bb5\u6bd4\u7b2c\u4e00\u4e2a\u5b57\u6bb5\u957f\u7684\u884c\u3002<\/p>\n<p>\u6a21\u5f0f\u5339\u914d\u8868\u8fbe\u5f0f\uff1a\u7528\u8fd0\u7b97\u7b26~(\u5339\u914d)\u548c~!(\u4e0d\u5339\u914d)\u3002<\/p>\n<p>\u6a21\u5f0f\uff0c\u6a21\u5f0f\uff1a\u6307\u5b9a\u4e00\u4e2a\u884c\u7684\u8303\u56f4\u3002\u8be5\u8bed\u6cd5\u4e0d\u80fd\u5305\u62ecBEGIN\u548cEND\u6a21\u5f0f\u3002<\/p>\n<p>BEGIN\uff1a\u8ba9\u7528\u6237\u6307\u5b9a\u5728\u7b2c\u4e00\u6761\u8f93\u5165\u8bb0\u5f55\u88ab\u5904\u7406\u4e4b\u524d\u6240\u53d1\u751f\u7684\u52a8\u4f5c\uff0c\u901a\u5e38\u53ef\u5728\u8fd9\u91cc\u8bbe\u7f6e\u5168\u5c40\u53d8\u91cf\u3002<\/p>\n<p>END\uff1a\u8ba9\u7528\u6237\u5728\u6700\u540e\u4e00\u6761\u8f93\u5165\u8bb0\u5f55\u88ab\u8bfb\u53d6\u4e4b\u540e\u53d1\u751f\u7684\u52a8\u4f5c\u3002<\/p>\n<p>1.2. \u64cd\u4f5c<\/p>\n<p>\u64cd\u4f5c\u7531\u4e00\u4eba\u6216\u591a\u4e2a\u547d\u4ee4\u3001\u51fd\u6570\u3001\u8868\u8fbe\u5f0f\u7ec4\u6210\uff0c\u4e4b\u95f4\u7531\u6362\u884c\u7b26\u6216\u5206\u53f7\u9694\u5f00\uff0c\u5e76\u4f4d\u4e8e\u5927\u62ec\u53f7\u5185\u3002\u4e3b\u8981\u6709\u56db\u90e8\u4efd\uff1a<\/p>\n<p>\u53d8\u91cf\u6216\u6570\u7ec4\u8d4b\u503c<\/p>\n<p>\u8f93\u51fa\u547d\u4ee4<\/p>\n<p>\u5185\u7f6e\u51fd\u6570<\/p>\n<p>\u63a7\u5236\u6d41\u547d\u4ee4<\/p>\n<p>---------------------------------------------------------------------------------------------------------------------------<\/p>\n<p>awk\u7684\u8f93\u51fa\uff1a<\/p>\n<p>\u4e00\u3001print<\/p>\n<p>print\u7684\u4f7f\u7528\u683c\u5f0f\uff1a<\/p>\n<p>&nbsp;&nbsp;&nbsp; print item1, item2, ...<\/p>\n<p>\u8981\u70b9\uff1a<\/p>\n<p>1\u3001\u5404\u9879\u76ee\u4e4b\u95f4\u4f7f\u7528\u9017\u53f7\u9694\u5f00\uff0c\u800c\u8f93\u51fa\u65f6\u5219\u4ee5\u7a7a\u767d\u5b57\u7b26\u5206\u9694\uff1b<\/p>\n<p>2\u3001\u8f93\u51fa\u7684item\u53ef\u4ee5\u4e3a\u5b57\u7b26\u4e32\u6216\u6570\u503c\u3001\u5f53\u524d\u8bb0\u5f55\u7684\u5b57\u6bb5(\u5982$1)\u3001\u53d8\u91cf\u6216awk\u7684\u8868\u8fbe\u5f0f\uff1b\u6570\u503c\u4f1a\u5148\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32\uff0c\u800c\u540e\u518d\u8f93\u51fa\uff1b<\/p>\n<p>3\u3001print\u547d\u4ee4\u540e\u9762\u7684item\u53ef\u4ee5\u7701\u7565\uff0c\u6b64\u65f6\u5176\u529f\u80fd\u76f8\u5f53\u4e8eprint $0, \u56e0\u6b64\uff0c\u5982\u679c\u60f3\u8f93\u51fa\u7a7a\u767d\u884c\uff0c\u5219\u9700\u8981\u4f7f\u7528print &quot;&quot;\uff1b<\/p>\n<p>\u4f8b\u5b50\uff1a<\/p>\n<p># awk &#039;BEGIN { print &quot;line one\\nline two\\nline three&quot; }&#039;<\/p>\n<p>awk -F: &#039;{ print $1, $3 }&#039; \/etc\/passwd<\/p>\n<p><\/p>\n<p>\u4e8c\u3001awk\u53d8\u91cf<\/p>\n<p>2.1 awk\u5185\u7f6e\u53d8\u91cf\u4e4b\u8bb0\u5f55\u53d8\u91cf\uff1a<\/p>\n<p>FS: field separator\uff0c\u8bfb\u53d6\u6587\u4ef6\u672c\u65f6\uff0c\u6240\u4f7f\u7528\u5b57\u6bb5\u5206\u9694\u7b26\uff1b<\/p>\n<p>RS: Record separator\uff0c\u8f93\u5165\u6587\u672c\u4fe1\u606f\u6240\u4f7f\u7528\u7684\u6362\u884c\u7b26\uff1b<\/p>\n<p>OFS: Output Filed Separator:<\/p>\n<p>ORS\uff1aOutput Row Separator\uff1a<\/p>\n<p>awk -F:<\/p>\n<p>OFS=&quot;#&quot;<\/p>\n<p>FS=&quot;:&quot;<\/p>\n<p>2.2 awk\u5185\u7f6e\u53d8\u91cf\u4e4b\u6570\u636e\u53d8\u91cf\uff1a<\/p>\n<p><span style=\"color: #ff0000\">NR: The number of input records\uff0cawk\u547d\u4ee4\u6240\u5904\u7406\u7684\u8bb0\u5f55\u6570\uff1b\u5982\u679c\u6709\u591a\u4e2a\u6587\u4ef6\uff0c\u8fd9\u4e2a\u6570\u76ee\u4f1a\u628a\u5904\u7406\u7684\u591a\u4e2a\u6587\u4ef6\u4e2d\u884c\u7edf\u4e00\u8ba1\u6570\uff1b<\/span><\/p>\n<p><span style=\"color: #ff0000\">NF\uff1aNumber of Field\uff0c\u5f53\u524d\u8bb0\u5f55\u7684field\u4e2a\u6570\uff1b<\/span><\/p>\n<p><span style=\"color: #ff0000\">FNR: \u4e0eNR\u4e0d\u540c\u7684\u662f\uff0cFNR\u7528\u4e8e\u8bb0\u5f55\u6b63\u5904\u7406\u7684\u884c\u662f\u5f53\u524d\u8fd9\u4e00\u6587\u4ef6\u4e2d\u88ab\u603b\u5171\u5904\u7406\u7684\u884c\u6570\uff1b<\/span><\/p>\n<p><span style=\"color: #ff0000\">ARGV: \u6570\u7ec4\uff0c\u4fdd\u5b58\u547d\u4ee4\u884c\u672c\u8eab\u8fd9\u4e2a\u5b57\u7b26\u4e32\uff0c\u5982awk &#039;{print $0}&#039; a.txt b.txt\u8fd9\u4e2a\u547d\u4ee4\u4e2d\uff0cARGV[0]\u4fdd\u5b58awk\uff0cARGV[1]\u4fdd\u5b58a.txt\uff1b<\/span><\/p>\n<p><span style=\"color: #ff0000\">ARGC: awk\u547d\u4ee4\u7684\u53c2\u6570\u7684\u4e2a\u6570\uff1b<\/span><\/p>\n<p><span style=\"color: #ff0000\">FILENAME: awk\u547d\u4ee4\u6240\u5904\u7406\u7684\u6587\u4ef6\u7684\u540d\u79f0\uff1b<\/span><\/p>\n<p><span style=\"color: #ff0000\">ENVIRON\uff1a\u5f53\u524dshell\u73af\u5883\u53d8\u91cf\u53ca\u5176\u503c\u7684\u5173\u8054\u6570\u7ec4\uff1b<\/span><\/p>\n<p>\u5982\uff1aawk &#039;BEGIN{print ENVIRON[&quot;PATH&quot;]}&#039;<\/p>\n<p>2.3 \u7528\u6237\u81ea\u5b9a\u4e49\u53d8\u91cf<\/p>\n<p>gawk\u5141\u8bb8\u7528\u6237\u81ea\u5b9a\u4e49\u81ea\u5df1\u7684\u53d8\u91cf\u4ee5\u4fbf\u5728\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u4f7f\u7528\uff0c\u53d8\u91cf\u540d\u547d\u540d\u89c4\u5219\u4e0e\u5927\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u76f8\u540c\uff0c\u53ea\u80fd\u4f7f\u7528\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf\uff0c\u4e14\u4e0d\u80fd\u4ee5\u6570\u5b57\u5f00\u5934\u3002gawk\u53d8\u91cf\u540d\u79f0\u533a\u5206\u5b57\u7b26\u5927\u5c0f\u5199\u3002<\/p>\n<p>2.3.1 \u5728\u811a\u672c\u4e2d\u8d4b\u503c\u53d8\u91cf<\/p>\n<p>\u5728gawk\u4e2d\u7ed9\u53d8\u91cf\u8d4b\u503c\u4f7f\u7528\u8d4b\u503c\u8bed\u53e5\u8fdb\u884c\uff0c\u4f8b\u5982\uff1a<\/p>\n<p>awk &#039;BEGIN{var=&quot;variable testing&quot;;print var}&#039;<\/p>\n<p>2.3.2 \u5728\u547d\u4ee4\u884c\u4e2d\u4f7f\u7528\u8d4b\u503c\u53d8\u91cf<\/p>\n<p>gawk\u547d\u4ee4\u4e5f\u53ef\u4ee5\u5728\u201c\u811a\u672c\u201d\u5916\u4e3a\u53d8\u91cf\u8d4b\u503c\uff0c\u5e76\u5728\u811a\u672c\u4e2d\u8fdb\u884c\u5f15\u7528\u3002\u4f8b\u5982\uff0c\u4e0a\u8ff0\u7684\u4f8b\u5b50\u8fd8\u53ef\u4ee5\u6539\u5199\u4e3a\uff1a<\/p>\n<p>awk -v var=&quot;variable testing&quot; &#039;BEGIN{print var}&#039;<\/p>\n<p><\/p>\n<p>\u4e09\u3001printf<\/p>\n<p>printf\u547d\u4ee4\u7684\u4f7f\u7528\u683c\u5f0f\uff1a<\/p>\n<p>printf format, item1, item2, ...<\/p>\n<p>\u8981\u70b9\uff1a<\/p>\n<p>1\u3001\u5176\u4e0eprint\u547d\u4ee4\u7684\u6700\u5927\u4e0d\u540c\u662f\uff0cprintf\u9700\u8981\u6307\u5b9aformat\uff1b<\/p>\n<p>2\u3001format\u7528\u4e8e\u6307\u5b9a\u540e\u9762\u7684\u6bcf\u4e2aitem\u7684\u8f93\u51fa\u683c\u5f0f\uff1b<\/p>\n<p>3\u3001printf\u8bed\u53e5\u4e0d\u4f1a\u81ea\u52a8\u6253\u5370\u6362\u884c\u7b26\uff1b\\n<\/p>\n<p>format\u683c\u5f0f\u7684\u6307\u793a\u7b26\u90fd\u4ee5%\u5f00\u5934\uff0c\u540e\u8ddf\u4e00\u4e2a\u5b57\u7b26\uff1b\u5982\u4e0b\uff1a<\/p>\n<p>%c: \u663e\u793a\u5b57\u7b26\u7684ASCII\u7801\uff1b<\/p>\n<p>%d, %i\uff1a\u5341\u8fdb\u5236\u6574\u6570\uff1b<\/p>\n<p>%e, %E\uff1a\u79d1\u5b66\u8ba1\u6570\u6cd5\u663e\u793a\u6570\u503c\uff1b<\/p>\n<p>%f: \u663e\u793a\u6d6e\u70b9\u6570\uff1b<\/p>\n<p>%g, %G: \u4ee5\u79d1\u5b66\u8ba1\u6570\u6cd5\u7684\u683c\u5f0f\u6216\u6d6e\u70b9\u6570\u7684\u683c\u5f0f\u663e\u793a\u6570\u503c\uff1b<\/p>\n<p>%s: \u663e\u793a\u5b57\u7b26\u4e32\uff1b<\/p>\n<p>%u: \u65e0\u7b26\u53f7\u6574\u6570\uff1b<\/p>\n<p>%%: \u663e\u793a%\u81ea\u8eab\uff1b<\/p>\n<p>\u4fee\u9970\u7b26\uff1a<\/p>\n<p>N: \u663e\u793a\u5bbd\u5ea6\uff1b<\/p>\n<p>-: \u5de6\u5bf9\u9f50\uff1b<\/p>\n<p>+\uff1a\u663e\u793a\u6570\u503c\u7b26\u53f7\uff1b<\/p>\n<p>\u4f8b\u5b50\uff1a<\/p>\n<p># awk -F: &#039;{printf &quot;%-15s %i\\n&quot;,$1,$3}&#039; \/etc\/passwd<\/p>\n<p><\/p>\n<p>\u56db\u3001\u8f93\u51fa\u91cd\u5b9a\u5411<\/p>\n<p>print items &gt; output-file<\/p>\n<p>print items &gt;&gt; output-file<\/p>\n<p>print items | command<\/p>\n<p>\u7279\u6b8a\u6587\u4ef6\u63cf\u8ff0\u7b26\uff1a<\/p>\n<p>\/dev\/stdin\uff1a\u6807\u51c6\u8f93\u5165<\/p>\n<p>\/dev\/sdtout: \u6807\u51c6\u8f93\u51fa<\/p>\n<p>\/dev\/stderr: \u9519\u8bef\u8f93\u51fa<\/p>\n<p>\/dev\/fd\/N: \u67d0\u7279\u5b9a\u6587\u4ef6\u63cf\u8ff0\u7b26\uff0c\u5982\/dev\/stdin\u5c31\u76f8\u5f53\u4e8e\/dev\/fd\/0\uff1b<\/p>\n<p>\u4f8b\u5b50\uff1a<\/p>\n<p># awk -F: &#039;{printf &quot;%-15s %i\\n&quot;,$1,$3 &gt; &quot;\/dev\/stderr&quot; }&#039; \/etc\/passwd<\/p>\n<p>\u4e94\u3001awk\u7684\u64cd\u4f5c\u7b26\uff1a<\/p>\n<p>5.1 \u7b97\u672f\u64cd\u4f5c\u7b26\uff1a<\/p>\n<p>-x: \u8d1f\u503c<\/p>\n<p>+x: \u8f6c\u6362\u4e3a\u6570\u503c\uff1b<\/p>\n<p>x^y:<\/p>\n<p>x**y: \u6b21\u65b9<\/p>\n<p>x*y: \u4e58\u6cd5<\/p>\n<p>x\/y\uff1a\u9664\u6cd5<\/p>\n<p>x+y:<\/p>\n<p>x-y:<\/p>\n<p>x%y:<\/p>\n<p>5.2 \u5b57\u7b26\u4e32\u64cd\u4f5c\u7b26\uff1a<\/p>\n<p>\u53ea\u6709\u4e00\u4e2a\uff0c\u800c\u4e14\u4e0d\u7528\u5199\u51fa\u6765\uff0c\u7528\u4e8e\u5b9e\u73b0\u5b57\u7b26\u4e32\u8fde\u63a5\uff1b<\/p>\n<p>5.3 \u8d4b\u503c\u64cd\u4f5c\u7b26\uff1a<\/p>\n<p>=<\/p>\n<p>+=<\/p>\n<p>-=<\/p>\n<p>*=<\/p>\n<p>\/=<\/p>\n<p>%=<\/p>\n<p>^=<\/p>\n<p>**=<\/p>\n<p>++<\/p>\n<p>--<\/p>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u679c\u67d0\u6a21\u5f0f\u4e3a=\u53f7\uff0c\u6b64\u65f6\u4f7f\u7528\/=\/\u53ef\u80fd\u4f1a\u6709\u8bed\u6cd5\u9519\u8bef\uff0c\u5e94\u4ee5\/[=]\/\u66ff\u4ee3\uff1b<\/p>\n<p>5.4 \u5e03\u5c14\u503c<\/p>\n<p>awk\u4e2d\uff0c\u4efb\u4f55\u975e0\u503c\u6216\u975e\u7a7a\u5b57\u7b26\u4e32\u90fd\u4e3a\u771f\uff0c\u53cd\u4e4b\u5c31\u4e3a\u5047\uff1b<\/p>\n<p>5.5 \u6bd4\u8f83\u64cd\u4f5c\u7b26\uff1a<\/p>\n<p>x &lt; y&nbsp;&nbsp;&nbsp; True if x is less than y.<\/p>\n<p>x &lt;= y&nbsp;&nbsp;&nbsp; True if x is less than or equal to y.<\/p>\n<p>x &gt; y&nbsp;&nbsp;&nbsp; True if x is greater than y.<\/p>\n<p>x &gt;= y&nbsp;&nbsp;&nbsp; True if x is greater than or equal to y.<\/p>\n<p>x == y&nbsp;&nbsp;&nbsp; True if x is equal to y.<\/p>\n<p>x != y&nbsp;&nbsp;&nbsp; True if x is not equal to y.<\/p>\n<p>x ~ y&nbsp;&nbsp;&nbsp; True if the string x matches the regexp denoted by y.<\/p>\n<p>x !~ y&nbsp;&nbsp;&nbsp; True if the string x does not match the regexp denoted by y.<\/p>\n<p>subscript in array&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True if the array array has an element with the subscript subscript.<\/p>\n<p>5.7 \u8868\u8fbe\u5f0f\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u7b26\uff1a<\/p>\n<p>&amp;&amp;<\/p>\n<p>||<\/p>\n<p>5.8 \u6761\u4ef6\u8868\u8fbe\u5f0f\uff1a<\/p>\n<p>selector?if-true-exp:if-false-exp<\/p>\n<p>if selector; then<\/p>\n<p>&nbsp; if-true-exp<\/p>\n<p>else<\/p>\n<p>&nbsp; if-false-exp<\/p>\n<p>fi<\/p>\n<p>a=3<\/p>\n<p>b=4<\/p>\n<p>a&gt;b?a is max:b ia max<\/p>\n<p>5.9 \u51fd\u6570\u8c03\u7528\uff1a<\/p>\n<p>function_name (para1,para2)<\/p>\n<p>\u516d\u3001awk\u7684\u6a21\u5f0f\uff1a<\/p>\n<p>awk &#039;program&#039; input-file1 input-file2 ...<\/p>\n<p>\u5176\u4e2d\u7684program\u4e3a:<\/p>\n<p>pattern { action }<\/p>\n<p>pattern { action }<\/p>\n<p>...<\/p>\n<p>6.1 \u5e38\u89c1\u7684\u6a21\u5f0f\u7c7b\u578b\uff1a<\/p>\n<p>1\u3001Regexp: \u6b63\u5219\u8868\u8fbe\u5f0f\uff0c\u683c\u5f0f\u4e3a\/regular expression\/<\/p>\n<p>2\u3001expresssion\uff1a \u8868\u8fbe\u5f0f\uff0c\u5176\u503c\u975e0\u6216\u4e3a\u975e\u7a7a\u5b57\u7b26\u65f6\u6ee1\u8db3\u6761\u4ef6\uff0c\u5982\uff1a$1 ~ \/foo\/ \u6216 $1 == &quot;magedu&quot;\uff0c\u7528\u8fd0\u7b97\u7b26~(\u5339\u914d)\u548c!~(\u4e0d\u5339\u914d)\u3002<\/p>\n<p>3\u3001Ranges\uff1a \u6307\u5b9a\u7684\u5339\u914d\u8303\u56f4\uff0c\u683c\u5f0f\u4e3apat1,pat2<\/p>\n<p>4\u3001BEGIN\/END\uff1a\u7279\u6b8a\u6a21\u5f0f\uff0c\u4ec5\u5728awk\u547d\u4ee4\u6267\u884c\u524d\u8fd0\u884c\u4e00\u6b21\u6216\u7ed3\u675f\u524d\u8fd0\u884c\u4e00\u6b21<\/p>\n<p>5\u3001Empty(\u7a7a\u6a21\u5f0f)\uff1a\u5339\u914d\u4efb\u610f\u8f93\u5165\u884c\uff1b<\/p>\n<p>6.2 \u5e38\u89c1\u7684Action<\/p>\n<p><span style=\"color: #ff0000\">1\u3001Expressions:<\/span><\/p>\n<p><span style=\"color: #ff0000\">2\u3001Control statements<\/span><\/p>\n<p><span style=\"color: #ff0000\">3\u3001Compound statements<\/span><\/p>\n<p><span style=\"color: #ff0000\">4\u3001Input statements<\/span><\/p>\n<p><span style=\"color: #ff0000\">5\u3001Output statements<\/span><\/p>\n<p>\/\u6b63\u5219\u8868\u8fbe\u5f0f\/\uff1a\u4f7f\u7528\u901a\u914d\u7b26\u7684\u6269\u5c55\u96c6\u3002<\/p>\n<p>\u5173\u7cfb\u8868\u8fbe\u5f0f\uff1a\u53ef\u4ee5\u7528\u4e0b\u9762\u8fd0\u7b97\u7b26\u8868\u4e2d\u7684\u5173\u7cfb\u8fd0\u7b97\u7b26\u8fdb\u884c\u64cd\u4f5c\uff0c\u53ef\u4ee5\u662f\u5b57\u7b26\u4e32\u6216\u6570\u5b57\u7684\u6bd4\u8f83\uff0c\u5982$2&gt;%1\u9009\u62e9\u7b2c\u4e8c\u4e2a\u5b57\u6bb5\u6bd4\u7b2c\u4e00\u4e2a\u5b57\u6bb5\u957f\u7684\u884c\u3002<\/p>\n<p>\u6a21\u5f0f\u5339\u914d\u8868\u8fbe\u5f0f\uff1a<\/p>\n<p>\u6a21\u5f0f\uff0c\u6a21\u5f0f\uff1a\u6307\u5b9a\u4e00\u4e2a\u884c\u7684\u8303\u56f4\u3002\u8be5\u8bed\u6cd5\u4e0d\u80fd\u5305\u62ecBEGIN\u548cEND\u6a21\u5f0f\u3002<\/p>\n<p>BEGIN\uff1a\u8ba9\u7528\u6237\u6307\u5b9a\u5728\u7b2c\u4e00\u6761\u8f93\u5165\u8bb0\u5f55\u88ab\u5904\u7406\u4e4b\u524d\u6240\u53d1\u751f\u7684\u52a8\u4f5c\uff0c\u901a\u5e38\u53ef\u5728\u8fd9\u91cc\u8bbe\u7f6e\u5168\u5c40\u53d8\u91cf\u3002<\/p>\n<p>END\uff1a\u8ba9\u7528\u6237\u5728\u6700\u540e\u4e00\u6761\u8f93\u5165\u8bb0\u5f55\u88ab\u8bfb\u53d6\u4e4b\u540e\u53d1\u751f\u7684\u52a8\u4f5c\u3002<\/p>\n<p>\u516b\u3001\u63a7\u5236\u8bed\u53e5\uff1a<\/p>\n<p>8.1 if-else<\/p>\n<p>\u8bed\u6cd5\uff1aif (condition) {then-body} else {[ else-body ]}<\/p>\n<p>\u4f8b\u5b50\uff1a<\/p>\n<p>awk -F: &#039;{if ($1==&quot;root&quot;) print $1, &quot;Admin&quot;; else print $1, &quot;Common User&quot;}&#039; \/etc\/passwd<\/p>\n<p>awk -F: &#039;{if ($1==&quot;root&quot;) printf &quot;%-15s: %s\\n&quot;, $1,&quot;Admin&quot;; else printf &quot;%-15s: %s\\n&quot;, $1, &quot;Common User&quot;}&#039; \/etc\/passwd<\/p>\n<p>awk -F: -v sum=0 &#039;{if ($3&gt;=500) sum++}END{print sum}&#039; \/etc\/passwd<\/p>\n<p>8.2 while<\/p>\n<p>\u8bed\u6cd5\uff1a while (condition){statement1; statment2; ...}<\/p>\n<p>awk -F: &#039;{i=1;while (i&lt;=3) {print $i;i++}}&#039; \/etc\/passwd<\/p>\n<p>awk -F: &#039;{i=1;while (i&lt;=NF) { if (length($i)&gt;=4) {print $i}; i++ }}&#039; \/etc\/passwd<\/p>\n<p>8.3 do-while<\/p>\n<p>\u8bed\u6cd5\uff1a do {statement1, statement2, ...} while (condition)<\/p>\n<p>awk -F: &#039;{i=1;do {print $i;i++}while(i&lt;=3)}&#039; \/etc\/passwd<\/p>\n<p>8.4 for<\/p>\n<p>\u8bed\u6cd5\uff1a for ( variable assignment; condition; iteration process) { statement1, statement2, ...}<\/p>\n<p>awk -F: &#039;{for(i=1;i&lt;=3;i++) print $i}&#039; \/etc\/passwd<\/p>\n<p>awk -F: &#039;{for(i=1;i&lt;=NF;i++) { if (length($i)&gt;=4) {print $i}}}&#039; \/etc\/passwd<\/p>\n<p>for\u5faa\u73af\u8fd8\u53ef\u4ee5\u7528\u6765\u904d\u5386\u6570\u7ec4\u5143\u7d20\uff1a<\/p>\n<p>\u8bed\u6cd5\uff1a for (i in array) {statement1, statement2, ...}<\/p>\n<p>awk -F: &#039;$NF!~\/^$\/{BASH[$NF]++}END{for(A in BASH){printf &quot;%15s:%i\\n&quot;,A,BASH[A]}}&#039; \/etc\/passwd<\/p>\n<p>8.5 case<\/p>\n<p>\u8bed\u6cd5\uff1aswitch (expression) { case VALUE or \/REGEXP\/: statement1, statement2,... default: statement1, ...}<\/p>\n<p>8.6 break \u548c continue<\/p>\n<p>\u5e38\u7528\u4e8e\u5faa\u73af\u6216case\u8bed\u53e5\u4e2d<\/p>\n<p>8.7 next<\/p>\n<p>\u63d0\u524d\u7ed3\u675f\u5bf9\u672c\u884c\u6587\u672c\u7684\u5904\u7406\uff0c\u5e76\u63a5\u7740\u5904\u7406\u4e0b\u4e00\u884c\uff1b\u4f8b\u5982\uff0c\u4e0b\u9762\u7684\u547d\u4ee4\u5c06\u663e\u793a\u5176ID\u53f7\u4e3a\u5947\u6570\u7684\u7528\u6237\uff1a<\/p>\n<p># awk -F: &#039;{if($3%2==0) next;print $1,$3}&#039; \/etc\/passwd<\/p>\n<p>\u4e5d awk\u4e2d\u4f7f\u7528\u6570\u7ec4<\/p>\n<p>9.1 \u6570\u7ec4<\/p>\n<p>array[index-expression]<\/p>\n<p>index-expression\u53ef\u4ee5\u4f7f\u7528\u4efb\u610f\u5b57\u7b26\u4e32\uff1b\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u679c\u67d0\u6570\u636e\u7ec4\u5143\u7d20\u4e8b\u5148\u4e0d\u5b58\u5728\uff0c\u90a3\u4e48\u5728\u5f15\u7528\u5176\u65f6\uff0cawk\u4f1a\u81ea\u52a8\u521b\u5efa\u6b64\u5143\u7d20\u5e76\u521d\u59cb\u5316\u4e3a\u7a7a\u4e32\uff1b\u56e0\u6b64\uff0c\u8981\u5224\u65ad\u67d0\u6570\u636e\u7ec4\u4e2d\u662f\u5426\u5b58\u5728\u67d0\u5143\u7d20\uff0c\u9700\u8981\u4f7f\u7528index in array\u7684\u65b9\u5f0f\u3002<\/p>\n<p>\u8981\u904d\u5386\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\uff0c\u9700\u8981\u4f7f\u7528\u5982\u4e0b\u7684\u7279\u6b8a\u7ed3\u6784\uff1a<\/p>\n<p>for (var in array) { statement1, ... }<\/p>\n<p>\u5176\u4e2d\uff0cvar\u7528\u4e8e\u5f15\u7528\u6570\u7ec4\u4e0b\u6807\uff0c\u800c\u4e0d\u662f\u5143\u7d20\u503c\uff1b<\/p>\n<p>\u4f8b\u5b50\uff1a<\/p>\n<p>netstat -ant | awk &#039;\/^tcp\/ {++S[$NF]} END {for(a in S) print a, S[a]}&#039;<\/p>\n<p>\u6bcf\u51fa\u73b0\u4e00\u88ab\/^tcp\/\u6a21\u5f0f\u5339\u914d\u5230\u7684\u884c\uff0c\u6570\u7ec4S[$NF]\u5c31\u52a01\uff0cNF\u4e3a\u5f53\u524d\u5339\u914d\u5230\u7684\u884c\u7684\u6700\u540e\u4e00\u4e2a\u5b57\u6bb5\uff0c\u6b64\u5904\u7528\u5176\u503c\u505a\u4e3a\u6570\u7ec4S\u7684\u5143\u7d20\u7d22\u5f15\uff1b<\/p>\n<p>awk &#039;{counts[$1]++}; END {for(url in counts) print counts[url], url}&#039; \/var\/log\/httpd\/access_log<\/p>\n<p>\u7528\u6cd5\u4e0e\u4e0a\u4e00\u4e2a\u4f8b\u5b50\u76f8\u540c\uff0c\u7528\u4e8e\u7edf\u8ba1\u67d0\u65e5\u5fd7\u6587\u4ef6\u4e2dIP\u5730\u7684\u8bbf\u95ee\u91cf<\/p>\n<p>9.2 \u5220\u9664\u6570\u7ec4\u53d8\u91cf<\/p>\n<p>\u4ece\u5173\u7cfb\u6570\u7ec4\u4e2d\u5220\u9664\u6570\u7ec4\u7d22\u5f15\u9700\u8981\u4f7f\u7528delete\u547d\u4ee4\u3002\u4f7f\u7528\u683c\u5f0f\u4e3a\uff1a<\/p>\n<p>delete&nbsp; array[index]<\/p>\n<p>\u5341\u3001awk\u7684\u5185\u7f6e\u51fd\u6570<\/p>\n<p>split(string, array [, fieldsep [, seps ] ])<\/p>\n<p>\u529f\u80fd\uff1a\u5c06string\u8868\u793a\u7684\u5b57\u7b26\u4e32\u4ee5fieldsep\u4e3a\u5206\u9694\u7b26\u8fdb\u884c\u5206\u9694\uff0c\u5e76\u5c06\u5206\u9694\u540e\u7684\u7ed3\u679c\u4fdd\u5b58\u81f3array\u4e3a\u540d\u7684\u6570\u7ec4\u4e2d\uff1b\u6570\u7ec4\u4e0b\u6807\u4e3a\u4ece0\u5f00\u59cb\u7684\u5e8f\u5217\uff1b<\/p>\n<p>netstat -ant | awk &#039;\/:80\\&gt;\/{split($5,clients,&quot;:&quot;);IP[clients[1]]++}END{for(i in IP){print IP[i],i}}&#039; | sort -rn | head -50<\/p>\n<p>length([string])<\/p>\n<p>\u529f\u80fd\uff1a\u8fd4\u56destring\u5b57\u7b26\u4e32\u4e2d\u5b57\u7b26\u7684\u4e2a\u6570\uff1b<\/p>\n<p>substr(string, start [, length])<\/p>\n<p>\u529f\u80fd\uff1a\u53d6string\u5b57\u7b26\u4e32\u4e2d\u7684\u5b50\u4e32\uff0c\u4ecestart\u5f00\u59cb\uff0c\u53d6length\u4e2a\uff1bstart\u4ece1\u5f00\u59cb\u8ba1\u6570\uff1b<\/p>\n<p>system(command)<\/p>\n<p>\u529f\u80fd\uff1a\u6267\u884c\u7cfb\u7edfcommand\u5e76\u5c06\u7ed3\u679c\u8fd4\u56de\u81f3awk\u547d\u4ee4<\/p>\n<p>systime()<\/p>\n<p>\u529f\u80fd\uff1a\u53d6\u7cfb\u7edf\u5f53\u524d\u65f6\u95f4<\/p>\n<p>tolower(s)<\/p>\n<p>\u529f\u80fd\uff1a\u5c06s\u4e2d\u7684\u6240\u6709\u5b57\u6bcd\u8f6c\u4e3a\u5c0f\u5199<\/p>\n<p>toupper(s)<\/p>\n<p>\u529f\u80fd\uff1a\u5c06s\u4e2d\u7684\u6240\u6709\u5b57\u6bcd\u8f6c\u4e3a\u5927\u5199<\/p>\n<p>\u5341\u4e00\u3001\u7528\u6237\u81ea\u5b9a\u4e49\u51fd\u6570<\/p>\n<p>\u81ea\u5b9a\u4e49\u51fd\u6570\u4f7f\u7528function\u5173\u952e\u5b57\u3002\u683c\u5f0f\u5982\u4e0b\uff1a<\/p>\n<p>function F_NAME([variable])<\/p>\n<p>{<\/p>\n<p>&nbsp;&nbsp;&nbsp; statements<\/p>\n<p>}<\/p>\n<p>\u51fd\u6570\u8fd8\u53ef\u4ee5\u4f7f\u7528return\u8bed\u53e5\u8fd4\u56de\u503c\uff0c\u683c\u5f0f\u4e3a\u201creturn value\u201d\u3002<\/p>\n<p><\/p>\n<hr \/>\n<p><span style=\"color: #ff0000\"><strong><br \/><\/strong><\/span><\/p>\n<p><span style=\"color: #ff0000\"><strong>\u5b9e\u4f8b\u89e3\u6790\uff1a<\/strong><\/span><\/p>\n<p>\u8f93\u51fa\u4e0b\u5217\u6587\u672c\u4e3a\u533b\u9662 \u6d4e\u5357<\/p>\n<p>[2015-10-01 00:00:15]Service=search&amp;&amp;costtime=207ms&amp;&amp;visitorIP=10.144.106.40&amp;&amp;reqid=_mobileengine_14436288154191220&amp;&amp;uvid=&amp;&amp;searchWord=\u533b\u9662&amp;&amp;rmiCosttime=79ms&amp;&amp;userAgent={SogouMap for android}&amp;&amp;status=ok&amp;&amp;querystring=range=bound:1.3005697E7,4360016.0,1.3012847E7,4369178.0:0&amp;submittime=1&amp;what=keyword:\u533b\u9662&amp;pageinfo=1,10&amp;encrypt=1&amp;level=13}&amp;hasResult&amp;city=\u6d4e\u5357<\/p>\n<p>[2015-10-01 00:00:05] The qaSrchRult is matching the keyword...<\/p>\n<p>[2015-10-01 00:00:05] The recommand candidate length is 1<\/p>\n<p>[2015-10-01 00:00:05] candidate matching end.<\/p>\n<p>[2015-10-01 00:00:05] The qaSrchRult matching end...<\/p>\n<p><span style=\"color: #ff0000\"><strong>\u7b54\u6848\uff1a &nbsp;awk -F&#039;(searchWord=)|(city=)|&amp;&amp;&#039; &#039;\/service=search\/{print $7,$NF}&#039; filename<\/strong><\/span><\/p>\n<p><\/p>\n<p>\u7cfb\u7edf\u8fde\u63a5\u72b6\u6001\u7bc7\uff1a<\/p>\n<p>1.\u67e5\u770bTCP\u8fde\u63a5\u72b6\u6001<\/p>\n<p>netstat -nat |awk \u2018{print $6}\u2019|sort|uniq -c|sort -rn<\/p>\n<p>netstat -n | awk \u2018\/^tcp\/ {++S[$NF]};END {for(a in S) print a, S[a]}\u2019 \u6216<\/p>\n<p>netstat -n | awk \u2018\/^tcp\/ {++state[$NF]}; END {for(key in state) print key,&quot;\\t&quot;,state[key]}\u2019<\/p>\n<p>netstat -n | awk \u2018\/^tcp\/ {++arr[$NF]};END {for(k in arr) print k,&quot;t&quot;,arr[k]}\u2019<\/p>\n<p>netstat -n |awk \u2018\/^tcp\/ {print $NF}\u2019|sort|uniq -c|sort -rn<\/p>\n<p>netstat -ant | awk \u2018{print $NF}\u2019 | grep -v \u2018[a-z]\u2018 | sort | uniq -c<\/p>\n<p>2.\u67e5\u627e\u8bf7\u6c42\u6570\u8bf720\u4e2aIP\uff08\u5e38\u7528\u4e8e\u67e5\u627e\u653b\u6765\u6e90\uff09\uff1a<\/p>\n<p>netstat -anlp|grep 80|grep tcp|awk \u2018{print $5}\u2019|awk -F: \u2018{print $1}\u2019|sort|uniq -c|sort -nr|head -n20<\/p>\n<p>netstat -ant |awk \u2018\/:80\/{split($5,ip,&quot;:&quot;);++A[ip[1]]}END{for(i in A) print A[i],i}\u2019 |sort -rn|head -n20<\/p>\n<p>3.\u7528tcpdump\u55c5\u63a280\u7aef\u53e3\u7684\u8bbf\u95ee\u770b\u770b\u8c01\u6700\u9ad8<\/p>\n<p>tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F&quot;.&quot; \u2018{print $1&quot;.&quot;$2&quot;.&quot;$3&quot;.&quot;$4}\u2019 | sort | uniq -c | sort -nr |head -20<\/p>\n<p>4.\u67e5\u627e\u8f83\u591atime_wait\u8fde\u63a5<\/p>\n<p>netstat -n|grep TIME_WAIT|awk \u2018{print $5}\u2019|sort|uniq -c|sort -rn|head -n20<\/p>\n<p>5.\u627e\u67e5\u8f83\u591a\u7684SYN\u8fde\u63a5<\/p>\n<p>netstat -an | grep SYN | awk \u2018{print $5}\u2019 | awk -F: \u2018{print $1}\u2019 | sort | uniq -c | sort -nr | more<\/p>\n<p>6.\u6839\u636e\u7aef\u53e3\u5217\u8fdb\u7a0b<\/p>\n<p>netstat -ntlp | grep 80 | awk \u2018{print $7}\u2019 | cut -d\/ -f1<\/p>\n<p>\u7f51\u7ad9\u65e5\u5fd7\u5206\u6790\u7bc71\uff08Apache\uff09\uff1a<\/p>\n<p>1.\u83b7\u5f97\u8bbf\u95ee\u524d10\u4f4d\u7684ip\u5730\u5740<\/p>\n<p>cat access.log|awk \u2018{print $1}\u2019|sort|uniq -c|sort -nr|head -10<\/p>\n<p>cat access.log|awk \u2018{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}\u2019<\/p>\n<p>2.\u8bbf\u95ee\u6b21\u6570\u6700\u591a\u7684\u6587\u4ef6\u6216\u9875\u9762,\u53d6\u524d20<\/p>\n<p>cat access.log|awk \u2018{print $11}\u2019|sort|uniq -c|sort -nr|head -20<\/p>\n<p>3.\u5217\u51fa\u4f20\u8f93\u6700\u5927\u7684\u51e0\u4e2aexe\u6587\u4ef6\uff08\u5206\u6790\u4e0b\u8f7d\u7ad9\u7684\u65f6\u5019\u5e38\u7528\uff09<\/p>\n<p>cat access.log |awk \u2018($7~\/.exe\/){print $10 &quot; &quot; $1 &quot; &quot; $4 &quot; &quot; $7}\u2019|sort -nr|head -20<\/p>\n<p>4.\u5217\u51fa\u8f93\u51fa\u5927\u4e8e200000byte(\u7ea6200kb)\u7684exe\u6587\u4ef6\u4ee5\u53ca\u5bf9\u5e94\u6587\u4ef6\u53d1\u751f\u6b21\u6570<\/p>\n<p>cat access.log |awk \u2018($10 &gt; 200000 &amp;&amp; $7~\/.exe\/){print $7}\u2019|sort -n|uniq -c|sort -nr|head -100<\/p>\n<p>5.\u5982\u679c\u65e5\u5fd7\u6700\u540e\u4e00\u5217\u8bb0\u5f55\u7684\u662f\u9875\u9762\u6587\u4ef6\u4f20\u8f93\u65f6\u95f4\uff0c\u5219\u6709\u5217\u51fa\u5230\u5ba2\u6237\u7aef\u6700\u8017\u65f6\u7684\u9875\u9762<\/p>\n<p>cat access.log |awk \u2018($7~\/.php\/){print $NF &quot; &quot; $1 &quot; &quot; $4 &quot; &quot; $7}\u2019|sort -nr|head -100<\/p>\n<p>6.\u5217\u51fa\u6700\u6700\u8017\u65f6\u7684\u9875\u9762(\u8d85\u8fc760\u79d2\u7684)\u7684\u4ee5\u53ca\u5bf9\u5e94\u9875\u9762\u53d1\u751f\u6b21\u6570<\/p>\n<p>cat access.log |awk \u2018($NF &gt; 60 &amp;&amp; $7~\/.php\/){print $7}\u2019|sort -n|uniq -c|sort -nr|head -100<\/p>\n<p>7.\u5217\u51fa\u4f20\u8f93\u65f6\u95f4\u8d85\u8fc7 30 \u79d2\u7684\u6587\u4ef6<\/p>\n<p>cat access.log |awk \u2018($NF &gt; 30){print $7}\u2019|sort -n|uniq -c|sort -nr|head -20<\/p>\n<p>8.\u7edf\u8ba1\u7f51\u7ad9\u6d41\u91cf\uff08G)<\/p>\n<p>cat access.log |awk \u2018{sum+=$10} END {print sum\/1024\/1024\/1024}\u2019<\/p>\n<p>9.\u7edf\u8ba1404\u7684\u8fde\u63a5<\/p>\n<p>awk \u2018($9 ~\/404\/)\u2019 access.log | awk \u2018{print $9,$7}\u2019 | sort<\/p>\n<p>10. \u7edf\u8ba1http status<\/p>\n<p><strong><span style=\"color: #ff0000\">cat access.log |awk \u2018{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}&#039;<\/span><\/strong><\/p>\n<p>cat access.log |awk &#039;{print $9}&#039;|sort|uniq -c|sort -rn<\/p>\n<p>10.\u8718\u86db\u5206\u6790\uff0c\u67e5\u770b\u662f\u54ea\u4e9b\u8718\u86db\u5728\u6293\u53d6\u5185\u5bb9\u3002<\/p>\n<p>\/usr\/sbin\/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E &#039;bot|crawler|slurp|spider&#039;<\/p>\n<p>\u7f51\u7ad9\u65e5\u5206\u67902(Squid\u7bc7\uff09\u6309\u57df\u7edf\u8ba1\u6d41\u91cf<\/p>\n<p>zcat squid_access.log.tar.gz| awk &#039;{print $10,$7}&#039; |awk &#039;BEGIN{FS=&quot;[ \/]&quot;}{trfc[$4]+=$1}END{for(domain in trfc){printf &quot;%st%dn&quot;,domain,trfc[domain]}}&#039;<\/p>\n<p>\u6570\u636e\u5e93\u7bc7<\/p>\n<p>1.\u67e5\u770b\u6570\u636e\u5e93\u6267\u884c\u7684sql<\/p>\n<p>\/usr\/sbin\/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i &#039;SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL&#039;<\/p>\n<p>\u7cfb\u7edfDebug\u5206\u6790\u7bc7<\/p>\n<p>1.\u8c03\u8bd5\u547d\u4ee4<\/p>\n<p>strace -p pid<\/p>\n<p>2.\u8ddf\u8e2a\u6307\u5b9a\u8fdb\u7a0b\u7684PID<\/p>\n<p>gdb -p pid<\/p>\n<p>---------------------------------------------------------------------------------------------------<\/p>\n<p>\u6570\u636e\u7edf\u8ba1\uff1a<\/p>\n<p>1\u3001\u6c42\u548c<\/p>\n<p>cat data|awk &#039;{sum+=$1} END {print &quot;Sum = &quot;, sum}&#039;<\/p>\n<p>2\u3001\u6c42\u5e73\u5747<\/p>\n<p>cat data|awk &#039;{sum+=$1} END {print &quot;Average = &quot;, sum\/NR}&#039;<\/p>\n<p>3\u3001\u6c42\u6700\u5927\u503c<\/p>\n<p>cat data|awk &#039;BEGIN {max = 0} {if ($1&gt;max) max=$1 fi} END {print &quot;Max=&quot;, max}&#039;<\/p>\n<p>4\u3001\u6c42\u6700\u5c0f\u503c\uff08min\u7684\u521d\u59cb\u503c\u8bbe\u7f6e\u4e00\u4e2a\u8d85\u5927\u6570\u5373\u53ef\uff09<\/p>\n<p>awk &#039;BEGIN {min = 1999999} {if ($1&lt;min) min=$1 fi} END {print &quot;Min=&quot;, min}&#039;<\/p>\n<p>5\u3001\u6bd4\u8f83\u6570\u503c\uff08\u6570\u7ec4\u5143\u7d20\u505a\u8fd0\u7b97\u81ea\u52a8\u8f6c\u6362\u6570\u636e\u7c7b\u578b\uff0c\u9002\u7528\u4e8e\u5c0f\u6570\uff09<\/p>\n<p>\u91cc 8.09<\/p>\n<p>\u4e2a\u4f1a 8.2<\/p>\n<p>\u52a9\u7406 7.2<\/p>\n<p>\u51cc\u4e71\u4e86 8<\/p>\n<p>\u5de5 3.0<\/p>\n<p>jj 9<\/p>\n<p>jj 9<\/p>\n<p>gg 8.1<\/p>\n<p>gg 9.3<\/p>\n<p>jj 9<\/p>\n<p>gg 6<\/p>\n<p>jj 23&#039;<\/p>\n<p><strong><span style=\"color: #ff0000\">cat file | awk &#039;{a[$2]}END{for (i in a) {if ((i+0)&gt;6.36)print i fi}}&#039;<\/span><\/strong><\/p>\n<p>&nbsp;6\u3001\u6587\u672cfile\u5185\u5bb9\u5982\u4e0b\uff0c&nbsp;\u8981\u6c42\u6bcf\u6b21\u5408\u5e76\u4e24\u884c\u5e76\u8f93\u51fa\uff0c<\/p>\n<p><\/p>\n<p>*************************** 1. row ***************************<br \/>mobile: 18617163231<br \/>pwd: b21b28637739af3b4432e270650c250b<br \/>*************************** 2. row ***************************<br \/>mobile: 18617163233<br \/>pwd: e10adc3949ba59abbe56e057f20f883e<br \/>*************************** 3. row ***************************<br \/>mobile: 18617163200<br \/>pwd: f4b43414ebb734da1cbf6a87c0faccf5<br \/>*************************** 4. row ***************************<br \/>mobile: 18617163201<br \/>pwd: f4b43414ebb734da1cbf6a87c0faccf5<br \/>*************************** 5. row ***************************<br \/>mobile: 18617163202<br \/>pwd: f4b43414ebb734da1cbf6a87c0faccf5<br \/>*************************** 6. row ***************************<br \/>mobile: 18617163203<br \/>pwd: fd6d1de8bbbb064a2f4a043270037c2d<br \/>*************************** 7. row ***************************<br \/>mobile: 18617163204<br \/>pwd: 2d431971964fa49e98fc7c9e47e70a7f<\/p>\n<p><\/p>\n<p><strong><span style=\"color: #ff0000\">\u7b54\u6848\uff1ased -r -e &#039;\/^\\*\/d&#039; -e &#039;\/^$\/d&#039; -e &#039;s\/.*:[ ]+\/\/g&#039;&nbsp; file | awk &#039;{if (NR%2==0) {print $0} else {printf &quot;%s,&quot;,$0}}&#039;<\/span><\/strong><\/p>\n<p><strong><span style=\"color: #ff0000\"><br \/><\/span><\/strong><\/p>\n<p><strong><span style=\"color: #ff0000\"><br \/><\/span><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u7b80\u4ecb &nbsp;&nbsp;&nbsp; Linux\u4e0b\u5fc5\u987b\u638c\u63e1\u7684\u4e09\u5927\u6587\u672c\u5904\u7406\u5de5\u5177\uff1a 1&nbsp; grep: \u6587\u672c\u8fc7\u6ee4\u5668 2&nbsp; sed\uff1a\u6d41\u7f16\u8f91\u5668 3&nbsp; awk: \u62a5\u544a\u751f\u6210\u5668 AWK\u662f\u4ee5 a.k.a. Aho, Kernighan and Weinberger\u4e09\u4f4d\u5f00\u53d1\u8005\u547d\u540d\uff0c\u5b83\u662f\u4e2a\u5f3a\u5927\u7684\u62a5\u544a\u751f\u6210\u5668\uff0c\u53ea\u6709\u4f60\u6ca1\u60f3\u5230\u7684\uff0c\u6ca1\u6709\u5b83\u505a\u4e0d\u5230\u7684\u3002 &nbsp;\u57fa\u672c\u7528\u6cd5\uff1a # awk [options] &#039;script&#039; file1 file2, &#8230; # awk [options] &#039;PATTERN { action }&#039; file1 file2, &#8230; &nbsp;&nbsp;&nbsp; print, printf \u4e8c\u3001\u5177\u4f53\u7528\u6cd5 1. \u6a21\u5f0f\u548c\u64cd\u4f5c awk\u811a\u672c\u662f\u7531\u6a21\u5f0f\u548c\u64cd\u4f5c\u7ec4\u6210\u7684\uff1a pattern {action} \u5982$ awk &#039;\/root\/&#039; test\uff0c\u6216$ awk &#039;$3 &lt; 100&#039; test\u3002 \u4e24\u8005\u662f\u53ef\u9009\u7684\uff0c\u5982\u679c\u6ca1\u6709\u6a21\u5f0f\uff0c\u5219action\u5e94\u7528\u5230\u5168\u90e8\u8bb0\u5f55\uff0c\u5982\u679c\u6ca1\u6709action\uff0c\u5219\u8f93\u51fa\u5339\u914d\u5168\u90e8\u8bb0\u5f55\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e00\u4e2a\u8f93\u5165\u884c\u90fd\u662f\u4e00\u6761\u8bb0\u5f55\uff0c\u4f46\u7528\u6237\u53ef\u901a\u8fc7RS\u53d8\u91cf\u6307\u5b9a\u4e0d\u540c\u7684\u5206\u9694\u7b26\u8fdb\u884c\u5206\u9694\u3002 1.1&#8230;.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-407","post","type-post","status-publish","format-standard","hentry","category-linux-shell"],"aioseo_notices":[],"brizy_media":[],"_links":{"self":[{"href":"https:\/\/peloo.net\/index.php?rest_route=\/wp\/v2\/posts\/407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/peloo.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/peloo.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/peloo.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/peloo.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=407"}],"version-history":[{"count":13,"href":"https:\/\/peloo.net\/index.php?rest_route=\/wp\/v2\/posts\/407\/revisions"}],"predecessor-version":[{"id":652,"href":"https:\/\/peloo.net\/index.php?rest_route=\/wp\/v2\/posts\/407\/revisions\/652"}],"wp:attachment":[{"href":"https:\/\/peloo.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/peloo.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/peloo.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}