- 論壇徽章:
- 0
|
本帖最后由 KoomIer 于 2015-09-21 16:18 編輯
看到大神們都是awk黨,我都是撿漏學(xué)習(xí)了
這次打算把這一篇通讀了,任性翻譯了,所以不用介意啊
測試環(huán)境: cygwin:CYGWIN_NT-6.1-WOW awk:GNU Awk 4.1.1
原文自: www。grymoire。com/Unix/Awk。html ##CU不能插入鏈接還真是麻煩
1. Why awk
awk兄弟很多, awk, nawk, gawk, 用的時(shí)候注意點(diǎn)兼容性,sun里面很可能用nawk
現(xiàn)在還有JAWK, TAWK, MAWK, 我們不用關(guān)心那么多吧
名字那么丑呢,是因?yàn)樽髡唛L得丑,A. Aho, B. W. Kernighan and P. Weinberger.
至于好用嘛:
1. nuix系列的輸出多數(shù)是行列形式, awk非常善于這個(gè)
2. awk類C的語法,
3. awk優(yōu)秀的字符串功能
4. 關(guān)聯(lián)數(shù)組 ## 這個(gè)就是類似!a[$0]++, $0不一定為數(shù)字了,看著是不是像python的字典啊,哈哈
作者還說了,其實(shí)啊, 文本處理還是要看perl, awk可以用a2p來轉(zhuǎn)換為perl
2. 基本結(jié)構(gòu)awk的本質(zhì)結(jié)構(gòu)如上,是一個(gè)條件表達(dá)式,如果符合pattern就執(zhí)行action。
其中缺省的pattern為空,如awk '{print $0}' a.txt; action 缺省為print $0, 如 awk '1- [~/test]$ cat a.txt
- a
- b
- c
- [~/test]$ awk '{print $0}' a.txt
- a
- b
- c
- [~/test]$ awk '1' a.txt
- a
- b
- c
復(fù)制代碼 ' a.txt
BEGIN{} END{} ,他們后面跟多action分別是開始讀之前,和讀到最后一行- [~/test]$ cat a.txt
- a 1 2 3 A
- b 4 5 6 B
- c 7 8 9 C
- [~/test]$ awk 'BEGIN{ print "START"} {print $2 "\t" $5} END {print "END"}' a.txtSTART
- 1 A
- 4 B
- 7 C
- END
復(fù)制代碼 看了上面的例子,就要提一嘴變量的問題, awk可以解析 \t
awk中$所帶的不是指變量,跟shell還有perl是不同的,他們只是指向?qū)?yīng)記錄中的域 ,關(guān)于這個(gè)舉個(gè)例子- [~/test]$ awk 'BEGIN{ x =5} {print x,$x} END {print "END"}' a.txt
- 5 A
- 5 B
- 5 C
- END
復(fù)制代碼 |
|