1.linux awkå½ä»¤
2.要成为一名专业的现源程序员,从零开始需要怎么一步步来比较好,现源要把最底层的现源先学精通吗?(个人认为)求学长
3.请问AWK和Python两个脚本语言,在处理字符串的现源时候,哪一个更快,现源可以给出详细的现源溯源码怎么破解例子和说明吗?
linux awkå½ä»¤
ä¸ãawkæ¯ä¸ä¸ªå¼ºå¤§çææ¬åæå·¥å ·ï¼ç¸å¯¹äºgrepçæ¥æ¾ï¼sedçç¼è¾ï¼awkå¨å ¶å¯¹æ°æ®åæ并çææ¥åæ¶ï¼æ¾å¾å°¤ä¸ºå¼ºå¤§ãç®åæ¥è¯´awkå°±æ¯ææ件éè¡çè¯»å ¥ï¼ä»¥ç©ºæ ¼ä¸ºé»è®¤åé符å°æ¯è¡åçï¼åå¼çé¨ååè¿è¡åç§åæå¤çãäº. awkå½ä»¤æ ¼å¼åé项
2.1 awkçè¯æ³æ两ç§å½¢å¼
1. å½ä»¤è¡æ¹å¼
awk [-F field-separator] 'commands' input-file(s)
å ¶ä¸ï¼commandsæ¯çæ£awkå½ä»¤ï¼[-Fååé符]æ¯å¯éçãinput-file(s)æ¯å¾ å¤ççæ件ã
å¨awkä¸ï¼æ件çæ¯ä¸è¡ä¸ï¼ç±ååé符åå¼çæ¯ä¸é¡¹ç§°ä¸ºä¸ä¸ªåãé常ï¼å¨ä¸æå-Fååé符çæ åµä¸ï¼é»è®¤çååé符æ¯ç©ºæ ¼ã
2. å°ææçawkå½ä»¤æå ¥ä¸ä¸ªåç¬æ件ï¼ç¶åè°ç¨:
awk -f awk-script-file input-file(s)
å ¶ä¸ï¼-fé项å è½½awk-script-fileä¸çawkèæ¬ï¼input-file(s)è·ä¸é¢çæ¯ä¸æ ·çã
2.2 å½ä»¤é项
ï¼1ï¼-F fs or --field-separator fs ï¼æå®è¾å ¥æ件æåé符ï¼fsæ¯ä¸ä¸ªå符串æè æ¯ä¸ä¸ªæ£å表达å¼ï¼å¦-F:ã
ï¼2ï¼-v var=value or --asign var=value ï¼èµå¼ä¸ä¸ªç¨æ·å®ä¹åéã
ï¼3ï¼-f scripfile or --file scriptfile ï¼ä»èæ¬æ件ä¸è¯»åawkå½ä»¤ã
ï¼4ï¼-mf nnn and -mr nnn ï¼å¯¹nnnå¼è®¾ç½®å å¨éå¶ï¼-mfé项éå¶åé ç»nnnçæ大åæ°ç®ï¼-mré项éå¶è®°å½çæ大æ°ç®ãè¿ä¸¤ä¸ªåè½æ¯Bellå®éªå®¤çawkçæ©å±åè½ï¼å¨æ åawkä¸ä¸éç¨ã
ï¼5ï¼-W compact or --compat, -W traditional or --traditional ï¼å¨å ¼å®¹æ¨¡å¼ä¸è¿è¡awkãæ以gawkçè¡ä¸ºåæ åçawkå®å ¨ä¸æ ·ï¼ææçawkæ©å±é½è¢«å¿½ç¥ã
ï¼6ï¼-W copyleft or --copyleft, -W copyright or --copyright ï¼æå°ç®çççæä¿¡æ¯ã
ï¼7ï¼-W help or --help, -W usage or --usage ï¼æå°å ¨é¨awké项åæ¯ä¸ªé项çç®ç说æã
ï¼8ï¼-W lint or --lint ï¼æå°ä¸è½åä¼ ç»unixå¹³å°ç§»æ¤çç»æçè¦åã
ï¼9ï¼-W lint-old or --lint-old ï¼æå°å ³äºä¸è½åä¼ ç»unixå¹³å°ç§»æ¤çç»æçè¦åã
ï¼ï¼-W posix ï¼æå¼å ¼å®¹æ¨¡å¼ãä½æ以ä¸éå¶ï¼ä¸è¯å«ï¼/xãå½æ°å ³é®åãfuncãæ¢ç åºå以åå½fsæ¯ä¸ä¸ªç©ºæ ¼æ¶ï¼å°æ°è¡ä½ä¸ºä¸ä¸ªååé符ï¼æä½ç¬¦**å**=ä¸è½ä»£æ¿^å^=ï¼fflushæ æã
ï¼ï¼-W re-interval or --re-inerval ï¼å 许é´éæ£å表达å¼ç使ç¨ï¼åè(grepä¸çPosixå符类)ï¼å¦æ¬å·è¡¨è¾¾å¼[[:alpha:]]ã
ï¼ï¼-W source program-text or --source program-text ï¼ä½¿ç¨program-textä½ä¸ºæºä»£ç ï¼å¯ä¸-få½ä»¤æ··ç¨ã
ï¼ï¼-W version or --version ï¼æå°bugæ¥åä¿¡æ¯ççæ¬ã
ä¸. 使ç¨æ¹æ³
#awk '{ pattern + action}' { filenames}
尽管æä½å¯è½ä¼å¾å¤æï¼ä½è¯æ³æ»æ¯è¿æ ·ï¼å ¶ä¸ pattern 表示 AWK å¨æ°æ®ä¸æ¥æ¾çå 容ï¼è action æ¯å¨æ¾å°å¹é å 容æ¶ææ§è¡çä¸ç³»åå½ä»¤ãè±æ¬å·ï¼{ }ï¼ä¸éè¦å¨ç¨åºä¸å§ç»åºç°ï¼ä½å®ä»¬ç¨äºæ ¹æ®ç¹å®ç模å¼å¯¹ä¸ç³»åæ令è¿è¡åç»ã patternå°±æ¯è¦è¡¨ç¤ºçæ£å表达å¼ï¼ç¨ææ æ¬èµ·æ¥ã
awkè¯è¨çæåºæ¬åè½æ¯å¨æ件æè å符串ä¸åºäºæå®è§åæµè§åæ½åä¿¡æ¯ï¼awkæ½åä¿¡æ¯åï¼æè½è¿è¡å ¶ä»ææ¬æä½ãå®æ´çawkèæ¬é常ç¨æ¥æ ¼å¼åææ¬æ件ä¸çä¿¡æ¯ã
é常ï¼awkæ¯ä»¥æ件çä¸è¡ä¸ºå¤çåä½çãawkæ¯æ¥æ¶æ件çä¸è¡ï¼ç¶åæ§è¡ç¸åºçå½ä»¤ï¼æ¥å¤çææ¬ã
å. 模å¼åæä½
awkèæ¬æ¯ç±æ¨¡å¼åæä½ç»æçï¼
pattern { action} å¦$ awk '/root/' testï¼æ$ awk '$3 < ' testã
两è æ¯å¯éçï¼å¦æ没æ模å¼ï¼åactionåºç¨å°å ¨é¨è®°å½ï¼å¦æ没æactionï¼åè¾åºå¹é å ¨é¨è®°å½ãé»è®¤æ åµä¸ï¼æ¯ä¸ä¸ªè¾å ¥è¡é½æ¯ä¸æ¡è®°å½ï¼ä½ç¨æ·å¯éè¿RSåéæå®ä¸åçåé符è¿è¡åéã
4.1. 模å¼
模å¼å¯ä»¥æ¯ä»¥ä¸ä»»æä¸ä¸ªï¼
ï¼1ï¼æ£å表达å¼ï¼ä½¿ç¨éé 符çæ©å±éã
ï¼2ï¼å ³ç³»è¡¨è¾¾å¼ï¼å¯ä»¥ç¨ä¸é¢è¿ç®ç¬¦è¡¨ä¸çå ³ç³»è¿ç®ç¬¦è¿è¡æä½ï¼å¯ä»¥æ¯å符ï¼3ï¼ä¸²ææ°åçæ¯è¾ï¼å¦$2>%1éæ©ç¬¬äºä¸ªå段æ¯ç¬¬ä¸ä¸ªå段é¿çè¡ã
ï¼4ï¼æ¨¡å¼å¹é 表达å¼ï¼ç¨è¿ç®ç¬¦~(å¹é )å~!(ä¸å¹é )ã
ï¼5ï¼æ¨¡å¼ï¼æ¨¡å¼ï¼æå®ä¸ä¸ªè¡çèå´ã该è¯æ³ä¸è½å æ¬BEGINåEND模å¼ã
ï¼6ï¼BEGINï¼è®©ç¨æ·æå®å¨ç¬¬ä¸æ¡è¾å ¥è®°å½è¢«å¤çä¹åæåççå¨ä½ï¼é常å¯å¨è¿éè®¾ç½®å ¨å±åéã
ï¼7ï¼ENDï¼è®©ç¨æ·å¨æåä¸æ¡è¾å ¥è®°å½è¢«è¯»åä¹ååççå¨ä½ã
4.2. æä½
æä½ç±ä¸äººæå¤ä¸ªå½ä»¤ãå½æ°ã表达å¼ç»æï¼ä¹é´ç±æ¢è¡ç¬¦æåå·éå¼ï¼å¹¶ä½äºå¤§æ¬å·å ã主è¦æåé¨ä»½ï¼
ï¼1ï¼åéææ°ç»èµå¼
ï¼2ï¼è¾åºå½ä»¤
ï¼3ï¼å ç½®å½æ°
ï¼4ï¼æ§å¶æµå½ä»¤
äº. awkçç¯å¢åé
å . awkè¿ç®ç¬¦
ä¸. è®°å½åå
7.1. è®°å½
awkææ¯ä¸ä¸ªä»¥æ¢è¡ç¬¦ç»æçè¡ç§°ä¸ºä¸ä¸ªè®°å½ã
è®°å½åé符ï¼é»è®¤çè¾å ¥åè¾åºçåé符é½æ¯å车ï¼ä¿åå¨å 建åéORSåRSä¸ã
$0åéï¼å®æçæ¯æ´æ¡è®°å½ãå¦$ awk '{ print $0}' testå°è¾åºtestæ件ä¸çææè®°å½ã
åéNRï¼ä¸ä¸ªè®¡æ°å¨ï¼æ¯å¤çå®ä¸æ¡è®°å½ï¼NRçå¼å°±å¢å 1ã
å¦$ awk '{ print NR,$0}' testå°è¾åºtestæ件ä¸ææè®°å½ï¼å¹¶å¨è®°å½åæ¾ç¤ºè®°å½å·ã
7.2. å
è®°å½ä¸æ¯ä¸ªåè¯ç§°åâåâï¼é»è®¤æ åµä¸ä»¥ç©ºæ ¼ætabåéãawkå¯è·è¸ªåç个æ°ï¼å¹¶å¨å 建åéNFä¸ä¿å该å¼ãå¦$ awk '{ print $1,$3}' testå°æå°testæ件ä¸ç¬¬ä¸å第ä¸ä¸ªä»¥ç©ºæ ¼åå¼çå(å)ã
7.3. ååé符
å 建åéFSä¿åè¾å ¥ååé符çå¼ï¼é»è®¤æ¯ç©ºæ ¼ætabãæ们å¯ä»¥éè¿-Få½ä»¤è¡é项修æ¹FSçå¼ãå¦$ awk -F: '{ print $1,$5}' testå°æå°ä»¥åå·ä¸ºåé符ç第ä¸ï¼ç¬¬äºåçå 容ã
å¯ä»¥åæ¶ä½¿ç¨å¤ä¸ªååé符ï¼è¿æ¶åºè¯¥æåé符åææ¾å°æ¹æ¬å·ä¸ï¼å¦$awk -F'[:/t]' '{ print $1,$3}' testï¼è¡¨ç¤ºä»¥ç©ºæ ¼ãåå·åtabä½ä¸ºåé符ã
è¾åºåçåé符é»è®¤æ¯ä¸ä¸ªç©ºæ ¼ï¼ä¿åå¨OFSä¸ãå¦$ awk -F: '{ print $1,$5}' testï¼$1å$5é´çéå·å°±æ¯OFSçå¼ã
å «. å¹é æä½ç¬¦(~)
ç¨æ¥å¨è®°å½æè åå å¹é æ£å表达å¼ãå¦$ awk '$1 ~/^root/' testå°æ¾ç¤ºtestæ件第ä¸åä¸ä»¥rootå¼å¤´çè¡ã
ä¹. æ¯è¾è¡¨è¾¾å¼
conditional expression1 ? expression2: expression3ï¼
ä¾å¦ï¼
$ awk '{ max = { $1 > $3} ? $1: $3: print max}' testãå¦æ第ä¸ä¸ªå大äºç¬¬ä¸ä¸ªåï¼$1å°±èµå¼ç»maxï¼å¦å$3å°±èµå¼ç»maxã
$ awk '$1 + $2 < ' testãå¦æ第ä¸å第äºä¸ªåç¸å 大äºï¼åæå°è¿äºè¡ã
$ awk '$1 > 5 && $2 < ' test,å¦æ第ä¸ä¸ªå大äº5ï¼å¹¶ä¸ç¬¬äºä¸ªåå°äºï¼åæå°è¿äºè¡ã
å. èå´æ¨¡æ¿
èå´æ¨¡æ¿å¹é ä»ç¬¬ä¸ä¸ªæ¨¡æ¿ç第ä¸æ¬¡åºç°å°ç¬¬äºä¸ªæ¨¡æ¿ç第ä¸æ¬¡åºç°ä¹é´ææè¡ãå¦ææä¸ä¸ªæ¨¡æ¿æ²¡åºç°ï¼åå¹é å°å¼å¤´ææ«å°¾ãå¦$ awk '/root/,/mysql/' testå°æ¾ç¤ºroot第ä¸æ¬¡åºç°å°mysql第ä¸æ¬¡åºç°ä¹é´çææè¡ã
要成为一名专业的程序员,从零开始需要怎么一步步来比较好,现源要把最底层的现源先学精通吗?(个人认为)求学长
前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,现源不如从工作中的现源需求出发)
建议:
不要乱买书,不要乱追新技术新名词,现源基础的现源涂鸦跳跳 源码东西经过很长时间积累而且还会在未来至少年通用。
回顾一下历史,现源看看历史上时间线上技术的现源发展,你才能明白明天会是现源什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。
注:你也许会很奇怪为什么下面的c timer源码东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:
现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。
越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。
微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》
所以,kodiDSF源码输出我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。
启蒙入门
1、 学习一门脚本语言,例如Python/Ruby
可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:
处理文本文件,或者csv (关键词 python csv, python open, python sys) 读一个本地文件,逐行处理(例如 word count,或者处理log)
遍历本地文件系统 (sys,试用平台 源码 os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果
跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量
学会用各种print之类简单粗暴的方式进行调试
学会用Google (phrase, domain, use reader to follow tech blogs)
为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。
2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。
Source Insight (或 ctag)
使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。
3、 熟悉Unix/Linux Shell和常见的命令行
如果你用windows,至少学会用虚拟机里的linux, vmware player是免费的,装个Ubuntu吧
一定要少用少用图形界面。
学会使用man来查看帮助
文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
学会使用一些文本操作命令 sed/awk/grep/tail/less/more …
学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…
了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
了解正则表达式,使用正则表达式来查找文件。
对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。
4、 学习Web基础(HTML/CSS/JS) + 服务器端技术 (LAMP)
未来必然是Web的世界,学习WEB基础的最佳网站是W3School。
学习HTML基本语法
学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
学会用 Firefox + Firebug 或 chrome 查看你觉得很炫的网页结构,并动态修改。
学习使用Javascript操纵HTML元件。理解DOM和动态网页(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 网上有免费的章节,足够用了。或参看 DOM 。
学会用 Firefox + Firebug 或 chrome 调试Javascript代码(设置断点,查看变量,性能,控制台等)
在一台机器上配置Apache 或 Nginx
学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
跟完一个名校的网络编程课程(例如:(升级版为Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。
请问AWK和Python两个脚本语言,在处理字符串的时候,哪一个更快,可以给出详细的例子和说明吗?
是啊,楼上说得对,awk的命令行复杂起来没法看,哪里有python优美?perl处理字符串是强,不过也难读懂啊。很多时候只有一个文件,就直接用vi了。
awk学了就能处理文本,学了python可有用多了。
速度的话,估计awk快些,因为多半是C写的,没测试过也无法下定论。