10月18日任務mysql
9.6/9.7 awksql
較grep、sed工具功能更豐富,能夠分段操做c#
# -F 指定分隔符,默認爲空格 {}內的 # $1表示:分割後的第一個字段 # $0表示一行 # 打印內容的第一段 [root@centos7 tmp]# head test.txt | awk -F ':' '{ print $1}' root bin daemon adm lp sync shutdown halt mail operator # 打印整行 [root@localhost ~]# head test.txt | awk -F ":" '{print $0}' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt: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
# ~ + 匹配內容(不用加\轉義) [root@centos7 tmp]# head test.txt | awk -F ':' '$1 ~ /root/' root:x:0:0:root:/root:/bin/bash
[root@centos7 tmp]# awk -F ':' '/root/ {print $1,$3} /mail/ {print$1,$3,$4}' test.txt root 0 mail 8 12 operator 11 # 指定分隔符,打印輸出格式一致 [root@centos7 tmp]# awk -F ':' '/root|mail/ {print $1,$3}' test.txt root 0 mail 8 operator 11 # 指定分隔符,打印輸出格式不一樣,同時指定輸出分割符 [root@localhost ~]# awk -F ':' '/root/ {print $1,"#",$3} /mail/ {print$1,"#",$3,"#",$4}' /etc/passwd root # 0 mail # 8 # 12 operator # 11
針對字符串的條件須要加上雙引號,這時會以字符串序排序;要以數字排序就不要加雙引號。可用的條件判斷符號包括:> >= < <= == !=centos
# 單個字段條件判斷 [root@centos7 tmp]# awk -F ':' '$3>=1000' test.txt castiel:x:1000:1000::/home/castiel:/bin/bash [root@centos7 tmp]# awk -F ':' '$3>=1000 {print $1}' test.txt castiel # == 相等(字段間比較) [root@centos7 tmp]# awk -F ':' '$3==$4' test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin castiel:x:1000:1000::/home/castiel:/bin/bash # != 不等於 [root@localhost ~]# awk -F ':' '$7!="/sbin/nologin" {print $1}' test.txt root sync shutdown halt castiel # 使用 && 或 || 來實現多條件判斷 [root@localhost ~]# awk -F ':' '$7!="/sbin/nologin" && $3==$4' /etc/passwd root:x:0:0:root:/root:/bin/bash mysql:x:1000:1000::/home/mysql:/bin/bash
[root@centos7 tmp]# awk -F ':' '{OFS="#"}{if ($3>=1000) {print $1,$3,$4}}' test.txt castiel#1000#1000
# OFS 表示輸出分隔符 [root@centos7 tmp]# head test.txt |awk -F ':' '{OFS="#"} {print $1,$3,$4}' root#0#0 bin#1#1 daemon#2#2 adm#3#4 lp#4#7 sync#5#0 shutdown#6#0 halt#7#0 mail#8#12 operator#11#0 # NR: 行數,使用$NR就對應表示$一、$2... [root@centos7 tmp]# awk -F ':' '{print NR,$0}' test.txt | head 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin # NF表示每行的段數,這裏NF的值爲7,因此$NF等價於$7 [root@localhost ~]# awk -F ':' '{print NR,$NF}' test.txt | head 1 /bin/bash 2 /sbin/nologin 3 /sbin/nologin 4 /sbin/nologin 5 /sbin/nologin 6 /bin/sync 7 /sbin/shutdown 8 /sbin/halt 9 /sbin/nologin 10 /sbin/nologin
[root@centos7 tmp]# head -n 3 test.txt | awk -F ':' '{OFS=":"} $1="root"' root:x:0:0:root:/root:/bin/bash root:x:1:1:bin:/bin:/sbin/nologin root:x:2:2:daemon:/sbin:/sbin/nologin
# 計算第三段的數字之和 [root@localhost ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt 4661