zoukankan      html  css  js  c++  java
  • linux_awk操作

    使用awk命令,打印/etc/hosts文件中的所有ip地址?
    cat /etc/hosts |awk '{print $1}'

    awk的内置参数,$0表示整个当前行,$1代表第一个字段,$2代表第二个字段,$n代表第n个字段

    awk -F ':'  '{print NR,NF,FILENAME}' passwd,NR代表行号,NF代表字段数量(每行的列数),FILENAME代表正在处理的文件名

    awk -F ':'  '{printf("user:%s   uid:%s ",$1,$3)}' passwd

    awk -F ':'  '{print "user:"$1  " uid:"$3}' passwd

    awk -F ':'  '{if($3>100)print $1,$3}' passwd Uid大于100的,要用if判断

    在服务器的日志中找出IP:172.29.10.22的访问日期(在/opt/lampp/logs目录下有access_log_201611140133这个文件,别的文件也可以)

    substr截取字符串:返回从起始位置起,指定长度之子字符串,若未指定长度,则返回从起始位置到字符串末尾的子字符串,substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分,awk '/172.29.10.22/ {print substr($4,2)}' access_log_201611140133从第2个字符开始指定的字符串,也可以awk '/172.29.10.22/ {print substr($4,2,20)}' access_log_201611140133,还可以用sed -n '/172.29.10.22/p ' access_log_201611140133|awk '{print $4}'

    awk逻辑判断式

    ~:匹配正则表达式,用户名以m开头的,awk -F ':' '$1~/^m.*/{print $1}' passwd

    !~:不匹配正则表达式,用户名不以m开头的,awk -F ':' '$1!~/^m.*/{print $1}' passwd

    判断逻辑表达式有==,!=,>,<,awk -F ':' '$3==或!=或>或<500 {print $1,$3}' passwd

    awk扩展格式

    BEGIN{print 'start'}pattern{awk命令}END{print 'end'},制表显示/etc/passwd对应的用户名,每行的行号,每行的列数

    awk -F ':' 'BEGIN{print "User  Line  Col"} {print $1,NR,NF} END{print "-----"FILENAME"-----"}' passwd

    统计当前文件夹下文件和文件夹占用的大小(就是文件+文件夹之和)

    ls -al | awk 'BEGIN {count=0}{count+=$5}END{print count/1024/1024"G"}'

    统计显示/etc/passwd的账户总人数(就是总的行数,一行就是一个账户,^$代表空行,$1!~/^$/是第一列不是空的账户)

    awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print count}' passwd

    统计显示/etc/passwd中UID大于100的用户名

    awk -F ':' 'BEGIN{count=0} $3>100{user[count++]=$1} END{for(i=0;i<count;i++) print i,user[i]}' passwd

    统计access_log_201611140130日志中每个IP出现的次数(以空格分隔去掉-F,$1就是IP,如果字典里没有IP就放进去,有就+1)

    awk '{arr[$1]++} END{for(key in arr) print key,arr[key]}' access_log_201611140130

    打印出172.29.10.22 6,如果有别的IP也会把该IP出现的次数打印出来

    1、匹配文件出现内容的行
    awk '/Exception/ {print NR}' catalina.out
    2、输出apache日志中的访问ip地址、访问路径和状态码
    awk '{print "ip=="$1,"path=="$7,"code=="$9}' /opt/lampp/logs/access_log
    3、将成绩不及格的学生名称输出
    awk '{if($2>60){}else{print $1}}' soce.txt
    4、将mysql的进程号写到mysql.pid这个文件中
    ps -ef|grep mysql|grep -v "grep"|awk '{print $2 > "mysql.pid"}'

    awk vs sed

    awk和sed都可以处理文本

    awk侧重于复杂逻辑处理(统计数量用awk)

    sed侧重于正则处理(修改用sed)

    awk和sed可以共同使用

    修改当前目录下所有包含aaa的文件,将aaa改成AAA

    find . -name "*aaa*" -exec rename aaa AAA {} ;

    find . -name "*aaa*" | xargs rename aaa AAA;


    修改目录下所有的文件中每行包含aaa的,把aaa改成AAA

    sed -i 's/aaa/AAA/g' `grep aaa -rl .` 

  • 相关阅读:
    easyui
    mvc
    Servlet简单计算器 2.0
    简易Servlet计算器1.0
    javaBean 练习—封装学生信息
    application和javaBean练习
    远程存储程序
    通讯录
    黑名单管理代码总结
    DAO
  • 原文地址:https://www.cnblogs.com/laosun0204/p/10541442.html
Copyright © 2011-2022 走看看