awk是行處理器: 相比較屏幕處理的優勢,在處理龐大文件時不會出現內存溢出或是處理緩慢的問題,一般用來格式化文本信息,awk命令在執行時不會直接更改文件的內容。正則表達式
awk '{print $1,$3}' filename
打印文件中每行的第一第三段(默認段的分隔符爲空格)awk -F ':' '{print $1,$3}' filename
打印文件中每行的第一第三段(-F選項是指定分隔符爲:)[root@localhost tmp]# awk '{print $0}' 2.txt sss ssd dd gg dd asdf gasdf 123 fqe fasd f fasd f ad df aaf dfa sdf fasd fad fa df a a df:fadf:afsdf:fad@afa@afad@afasd fadf#asff#fasdf#afdas`
[root@localhost tmp]# awk '{print $1}' 2.txt sss 123 dfa a fadf#asff#fasdf#afdas`
awk '{print $1}' 2.txt
這條命令是打印文件中每行的第一段(默認分段符是空格)awk -F ':' '{print $1}' 2.txt
這條命令式指定:爲分段符,且打印每行的第一段[root@localhost tmp]# awk -F ':' '{print $1}' 2.txt sss ssd dd gg dd asdf gasdf 123 fqe fasd f fasd f ad df aaf dfa sdf fasd fad fa df a a df
awk '{print $1"#"$2"#"$3"#"$4}' filename
[root@localhost tmp]# awk '{print $1"#"$2"#"$3"#"$4}' 2.txt sss#ssd#dd#gg 123#fqe#fasd#f dfa#sdf#fasd#fad a#df:fadf:afsdf:fad@afa@afad@afasd##
顯示出來的內容每段之間以#隔開bash
awk '/oo/' filename
列出含有oo的行[root@localhost awk]# awk '/oo/' 1.txt root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
awk -F ':' '$1~/oo/' 1.txt
列出1.txt中第一段能匹配到oo的行[root@localhost awk]# awk -F ':' '$1~/oo/' 1.txt root:x:0:0:root:/root:/bin/bash
awk -F ':' '$1~/oo+/' 1.txt
[root@localhost awk]# awk -F ':' '/oo+/' 1.txt root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
awk -F':' '/root/{print $1,$2} /user/{print $3,$4}' 1.txt
[root@localhost awk]# awk -F ':' '/root/{print $1,$3} /user/{print $3,$4}' 1.txt root 0 operator 11
awk -F ':' '$3==0{print $0}' 1.txt
列出第三段等於0的行awk -F ':' '$3>=1000{print $0}' 1.txt
列出第三段大於等於1000的行awk -F ':' '$7!="/sbin/nologin"{print $0}' 1.txt
列出第七段不是/sbin/nologin的行[root@localhost awk]# awk -F ':' '$3==0{print $0}' 1.txt root:x:0:0:root:/root:/bin/bash [root@localhost awk]# awk -F ':' '$3>=1000{print $0}' 1.txt lic:x:1000:1000::/home/lic:/bin/bash [root@localhost awk]# awk -F ':' '$7!="/sbin/nologin"{print $0}' 1.txt aabbccdd AABBCCDD root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt lic:x:1000:1000::/home/lic:/bin/bash
awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/' 1.txt
[root@localhost awk]# awk -F':' '{print NR"@"$0}' 1.txt 1@aabbccdd 顯示行號 2@AABBCCDD 3@root:x:0:0:root:/root:/bin/bash 4@bin:x:1:1:bin:/bin:/sbin/nologin 5@daemon:x:2:2:daemon:/sbin:/sbin/nologin 6@adm:x:3:4:adm:/var/adm:/sbin/nologin 7@lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 8@sync:x:5:0:sync:/sbin:/bin/sync 9@shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost awk]# awk -F':' '{print NF"@"$0}' 1.txt 1@aabbccdd 顯示每行多少段 1@AABBCCDD 7@root:x:0:0:root:/root:/bin/bash 7@bin:x:1:1:bin:/bin:/sbin/nologin 7@daemon:x:2:2:daemon:/sbin:/sbin/nologin 7@adm:x:3:4:adm:/var/adm:/sbin/nologin 7@lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7@sync:x:5:0:sync:/sbin:/bin/sync 7@shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
awk -F ':' 'NR<=10{$1="boot"}' 1.txt
[root@localhost awk]# awk -F ':' 'NR<=10{$1="boot"}{print $0}' 1.txt >> 2.txt [root@localhost awk]# cat 2.txt boot boot boot x 0 0 root /root /bin/bash boot x 1 1 bin /bin /sbin/nologin boot x 2 2 daemon /sbin /sbin/nologin boot x 3 4 adm /var/adm /sbin/nologin boot x 4 7 lp /var/spool/lpd /sbin/nologin boot x 5 0 sync /sbin /bin/sync boot x 6 0 shutdown /sbin /sbin/shutdown boot x 7 0 halt /sbin /sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin
NR<=10表示行號小於等於10 ,也就是前十行,{$1="boot"}就是給第一段賦值爲boot,後面依次是打印全部段,追加到2.txt中工具
awk -F':' '{(tot=tot+$3)};END{print tot}' 1.txt
求全部行的第三段加起來的和值[root@localhost awk]# awk -F':' '{(tot=tot+$3)};END{print tot}' 1.txt 2655