Linux AWK几种常见用法 我会带着你远行 2022-07-13 03:28 102阅读 0赞 ## **1.前言** ## > awk默认是以空白符为分隔符,来划分不同列的;比如`ps -ef`命令 [root@java55 ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 12月21 ? 00:00:07 /usr/lib/systemd/systemd --switc root 2 0 0 12月21 ? 00:00:00 [kthreadd] root 3 2 0 12月21 ? 00:00:28 [ksoftirqd/0] root 5 2 0 12月21 ? 00:00:00 [kworker/0:0H] root 7 2 0 12月21 ? 00:00:00 [migration/0] #打印每一行的第一列和第二列信息 [root@java55 ~]# ps -ef | awk '{print $1,$2}' UID PID root 1 root 2 root 3 root 5 > `$0`代表一行,比如 `root 3 2 0 12月21 ? 00:00:28` > `$1`代表第一列,`$2`代表第二列, ## **2.指定分隔符** ## > 比较常见的是/etc/passwd这个文件的分析,因为这个文件包含所有Linux系统下的用户信息,而且以冒号:分隔开; 我们需要指定冒号为分隔符 [root@java55 ~]# cat /etc/passwd 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 # 指定冒号为分隔符,打印每一行的第1列和第3列信息 [root@java55 ~]# cat /etc/passwd | awk '{FS=":"}{print $1,$3}' root:x:0:0:root:/root:/bin/bash bin 1 daemon 2 adm 3 lp 4 sync 5 shutdown 6 ## **3.条件判断** ## > 针对/etc/passwd的信息,当我们需要找到用户名为root或uid小于3的用户信息时,就需要判断某一列的值与root是否相等,或者判断uid是否小于3.下面找出该文件中用户名,也就是第一列为root的所有的行信息 # 以冒号为分隔符,第一列为root,打印对应的行的信息 [root@java55 ~]# cat /etc/passwd | awk '{FS=":"}{if($1="root") print $0}' root root x 1 1 bin /bin /sbin/nologin root x 2 2 daemon /sbin /sbin/nologin root x 3 4 adm /var/adm /sbin/nologin root x 4 7 lp /var/spool/lpd /sbin/nologin root x 5 0 sync /sbin /bin/sync root x 6 0 shutdown /sbin /sbin/shutdown #以冒号为分隔符,第三列的值小于3,打印对应的行的信息 [root@java55 ~]# cat /etc/passwd | awk '{FS=":"}{if($3<3) 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
还没有评论,来说两句吧...