gawk命令如何从文件读取程序脚本并使用自定义分隔符处理数据?
gawk,作为Unix系统中GNU版本的原始awk程序,以其强大的脚本功能在文本数据处理上独树一帜。它允许用户编写脚本,解析行数据并进行各种操作和展示。其基本语法结构为:gawk [参数]。其中,一些常用的参数包括:
- -f:用于从指定的文件中读取AWK程序源,而不是依赖于命令行输入的第一个参数。你可以多次使用此选项,例如:`gawk -f script.awk`。
- -F:允许用户自定义字段分隔符,如`gawk -F, 'print $1' data.csv`,这会按照逗号分割每一行的数据。
- -v:定义变量和设置默认值,这对于程序的全局环境管理非常实用。
- -m 和 -r:分别用于设置数据文件的最大记录大小和启用更严格的规则解析,以确保数据处理的准确性。
一个直观的实例是,你可以直接在命令行中运行一个简单的脚本,如`gawk '{print "helloworld"}'`,这会打印出固定的消息。对于更复杂的数据处理,比如读取`/etc/passwd`文件,可以使用`gawk -F: 'print $1' /etc/passwd`,这里以冒号为分隔符,提取每个用户ID。
总之,gawk提供了一个强大而灵活的工具,用于高效地处理文本数据,无论是简单的文本输出,还是复杂的字段解析,它都能轻松应对。
绛旓細瀹為檯涓 AWK 鐨勭‘鎷ユ湁鑷繁鐨勮瑷锛欰WK 绋嬪簭璁捐璇█锛 涓変綅鍒涘缓鑰呭凡灏嗗畠姝e紡瀹氫箟涓衡滄牱寮忔壂鎻忓拰澶勭悊璇█鈥濄傚畠鍏佽鎮ㄥ垱寤虹畝鐭殑绋嬪簭锛岃繖浜绋嬪簭璇诲彇杈撳叆鏂囦欢銆佷负鏁版嵁鎺掑簭銆佸鐞嗘暟鎹佸杈撳叆鎵ц璁$畻浠ュ強鐢熸垚鎶ヨ〃锛岃繕鏈夋棤鏁板叾浠栫殑鍔熻兘銆傛渶绠鍗曞湴璇达紝 AWK 鏄竴绉嶇敤浜庡鐞嗘枃鏈殑缂栫▼璇█宸ュ叿銆侫WK 鍦ㄥ緢澶氭柟闈㈢被浼...
绛旓細AWK鎻愪緵浜嗘瀬鍏跺己澶х殑鍔熻兘锛氬彲浠ヨ繘琛屾牱寮忚鍏ャ佹祦鎺у埗銆佹暟瀛﹁繍绠楃銆佽繘绋嬫帶鍒惰鍙ョ敋鑷充簬鍐呯疆鐨勫彉閲忓拰鍑芥暟銆傚畠鍏峰浜嗕竴涓畬鏁寸殑璇█鎵搴斿叿鏈夌殑鍑犱箮鎵鏈夌簿缇庣壒鎬с傚疄闄呬笂AWK鐨勭‘鎷ユ湁鑷繁鐨勮瑷锛欰WK绋嬪簭璁捐璇█锛屼笁浣嶅垱寤鸿呭凡灏嗗畠姝e紡瀹氫箟涓衡滄牱寮忔壂鎻忓拰澶勭悊璇█鈥濄傚畠鍏佽鎮ㄥ垱寤虹畝鐭殑绋嬪簭锛岃繖浜绋嬪簭璇诲彇杈撳叆鏂...
绛旓細perl涔熷緢绠鍗曠殑锛屼笉杩囧彲浠ヨ冭檻gawk [root@arch ~]# ls -l total 12 drwxr-xr-x 6 root root 4096 Apr 24 14:16 file drwxr-xr-x 4 root root 4096 Apr 23 14:09 setup drwxr-xr-x 2 root root 4096 May 5 15:11 tmp [root@arch ~]# ls -l | gawk '{$2/=3;print $0}'...
绛旓細閫氳繃娣诲姞鍛戒护閫夐」锛屼綘鍙互鏍规嵁闇瑕佸湪杩愯鑴氭湰鏃舵寚瀹氭帓搴忓瓧娈点備緥濡傦紝閫氳繃-v var閫夐」锛屼綘鍙互璋冩暣鎺掑簭閿紝浣夸箣閫傚簲涓嶅悓鐨勬暟鎹泦銆傛荤殑鏉ヨ锛孉wk鎻愪緵浜嗕竴绉嶅己澶т笖鐏垫椿鐨勬柟寮忔潵澶勭悊鏂囨湰鏂囦欢锛屾棤璁轰綘鐨勬暟鎹牸寮忓浣曪紝閮借兘閫氳繃缂栧啓awk鑴氭湰鏉ュ疄鐜版帓搴忓拰鍏朵粬鎿嶄綔銆傞氳繃瀛︿範鍜屽疄璺碉紝浣犲彲浠ユ牴鎹嚜宸辩殑闇姹傚畾鍒禷wk鑴氭湰...
绛旓細1銆佸熀鏈壒澶勭悊鍛戒护 FOR /?鐪嬬湅鍙傛暟/F鐨勮鏄 for /F "tokens=1,2 delims=," %A in (test.txt) DO @echo %A %B 濡備笂鏄樉绀轰袱鍒楋紝濡傛灉鏈3鍒楋紝鍒檛okens=1-3锛孈echo %A %B %C 寰幆鍙橀噺澶у皬鍐欐晱鎰燂紝鍒欐湁%A-%Z銆%a-%z锛屾渶澶氭敮鎸52鍒 2銆佸閮ㄥ伐鍏 涓嬭浇涓涓gawk.exe锛...
绛旓細浣犲ソ锛岀敤涓嬮潰杩欎釜鍛戒护鍙互瀹炵幇浣犵殑瑕佹眰锛歝at test.txt|sed 's/tcp)(HOST=/:/'|gawk -F: '{print $2}'|cut -c -14 test.txt鏄瓨鏀炬枃鏈殑鏂囦欢锛宨p鍦板潃蹇呴』鍍忎綘鐨勪緥瀛愰噷闈㈡槸瀹氶暱鐨勶紝濡傛灉鏄8.8.8.8杩欐牱鐨勶紝灏辨病鎷涗簡
绛旓細awk鍛戒护鏄疉lfred Aho, Peter Weinberger, Brian Kernighan涓変綅浣滆呰仈鍚堝紑鍙戠殑锛岀敤浜嶭inux/Unix涓鐞嗘暟鎹拰浜х敓鎶ュ憡銆俛wk鍛戒护鍔熻兘鍗佸垎寮哄ぇ锛屽彲鏍规嵁闇瑕佹姄鍙栥佹埅鍙栨寚瀹氱殑鍒楁垨琛屻傞鍏堝湪/mnt鐩綍涓嬪垱寤虹ず渚嬫枃鏈鏂囦欢f1锛屽叾鍐呭濡備笅锛1 hello hello 2 data data 3 xyz abc 4 123 789 5 ftp 6 Apache 7 ...
绛旓細纭闇姹傚涓嬶細涓や釜鏂囨湰閲屾瘡琛岄兘鍙湁涓涓猽rl鍦板潃銆俛.txt閲岄潰鐨勬槸鍏ㄧ殑锛宐.txt閲岄潰鐨勫叏閮ㄦ槸浠巃.txt閲岄潰鎻愬彇鍑烘潵鐨勶紝鍗砨鏄痑鐨勫瓙闆嗐傜洰鐨勬槸瑕佸緱鍒(a-b)杩欎釜闆嗗悎銆傝姹傜敤gawk.exe骞惰兘鍦╔P涓嬬敤銆傚疄鐜帮細gawk.exe "NR==FNR{a[$0]++} NR>FNR{c=0;for(i in a) if($0==i){c=1;break;} if...
绛旓細鏈杩戞湁浜洪棶锛屾垜鐨勭郴缁焥wap蹇鑰楀敖浜嗭紝鍙槸鍗翠笉鐭ラ亾鍝簺绋嬪簭鍗犵敤浜唖wap锛屽埌澶勫彂甯栭棶浠涔鍛戒护鍙互鏌ョ湅銆傚叾瀹瀕inux绯荤粺鐩墠骞舵病鏈夎繖鏍风殑鍛戒护锛堟垨璁告槸鏈夛紝浣嗘垜瀛ら檵瀵¢椈涓嶆竻妤氾級锛屼絾鏄垜浠彲浠閫氳繃缂栧啓鑴氭湰鏉ヨ嚜宸辨壘鍑哄崰鐢╯wap鐨勭▼搴忋傞偅涔堟庢牱缂栧啓杩欎釜鑴氭湰鍛紝棣栧厛銆佹垜浠渶瑕佺煡閬撳幓鍝煡鐪嬭繘绋嬪崰鐢ㄨ祫婧愮殑鎯呭喌銆傛瘡涓...
绛旓細杩欎釜灞炰簬shell瀛楃闆嗗拰鏂囦欢瀛楃闆嗕笉涓鑷撮棶棰 浣犵殑awk鍛戒护鏈韩鍐欐硶娌℃湁闂 寤鸿鏌ヨ鏂囦欢瀛楃闆嗭紝鍜屽綋鍓峴hell瀛楃闆 閮借皟鏁翠负utf8 杩欐牱澶勭悊灏变笉浼氬洜涓哄鑷翠贡鐮