linux步步为营(7)--awk--xargs

来源:互联网 发布:知乎dota2 编辑:程序博客网 时间:2024/05/30 23:32

参考http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

 

awk是一个强大的文本分析工具,有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

三种使用方式:1.命令行方式,2.shell脚本方式(略),

命令行语法1:

        awk [-F  field-separator]  'commands'  input-file(s)

        [-F域分隔符]是可选的,默认的域分隔符是空格/tab符号。对每行分域:$0(全部),$1,$2...

        commands 是真正awk命令,用{}分割成多个命令语句块。 

        input-file(s) 是待处理的文件。

 

命令行语法2:ll | awk [-F  field-separator]  'commands' 不需要input-file(s)

 

例子:

        //等效于 awk  -F ':'  '{print $1"\t"$7}' /etc/passwd

        cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}' 

        //BEGIN,END是内置变量

        cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}{print $1","$7}END{print "blue,/bin/nosh"}'

        //搜索/etc/passwd有root关键字的所有行,(没有指定action,默认输出每行的内容)。

        cat /etc/passwd |awk -F ':' '/mysql/'                 

        //正则表达式用"//"不用"{}"                                

        cat /etc/passwd |awk -F ':' '/^mysql/{print $1","$2}'                 

        

        //统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

        #cat /etc/passwd |awk -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",,,,,,,,,linecontent:"$0}' 

 

awk内置变量

        ARGC               命令行参数个数

        ARGV               命令行参数排列

        ENVIRON            支持队列中系统环境变量的使用

        FILENAME           awk浏览的文件名

        FNR                浏览文件的记录数

        FS                 设置输入域分隔符,等价于命令行 -F选项

        NF                 浏览记录的域的个数

        NR                 已读的记录数

        OFS                输出域分隔符

        ORS                输出记录分隔符

        RS                 控制记录分隔符

 

awk编程(多个指令语句)

        //统计/etc/passwd的账户人数

        cat /etc/passwd | awk '{c++;print $0;} END {print "user count = ",c}'

        //c是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。

        cat /etc/passwd | awk 'BEGIN {c=0;print "[start]user count = ", c} {c=c+1;print $0;} END{print "[end]user count = ", c}'

        //统计某个文件夹下的文件占用的字节数

        ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'

        [end]size is  8657198

        //如果以M为单位显示:

        ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}' 

        [end]size is  8.25889 M

        

        awk条件语句,循环语句借鉴于C语言,支持if-else, while、do/while、for、break、continue

        //搜索第10列=="[0区]小小养乐多"的列

        cat heartListener.log.2015022012 | awk '{if($10=="[0区]小小养乐多"){print $0;}}'

 

反引号,把内容作为命令执行,不是字符串

        for id in `\cat catalina.out | \grep "nio socket, server" |awk '{print $8}' | awk -F ':' '{print $NF}'`

        do

         echo -n "${id}----"  ;   cat catalina.out | \grep -c "${id}" | sort -n

        done

 

xargs

        //合并成1行

        ps -ef | grep root |awk '{print $2}' |xargs 

        //合并成行(每行20个)

        ps -ef | grep root |awk '{print $2}' |xargs -n 20

        //并把合并后的值,作为参数传递给rm

        ll | awk '{print $8}' |xargs rm -fr

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 软件升级后手机卡顿怎么办 ps通道抠图模糊怎么办 电脑锁屏死机了怎么办 ipad电源键坏了怎么办 华为平板死机黑屏了怎么办 苹果4s锁屏键坏了怎么办 平板电脑密码锁忘记密码怎么办 苹果平板电脑密码锁忘记密码怎么办 平板电脑密码锁密码锁死怎么办 小米平板黑屏按键亮怎么办 小米平板黑屏没反应怎么办 小米平板一刷黑屏了怎么办 小米4卡死了怎么办啊 苹果平板电脑开不了机怎么办 ipad开不了机怎么办都是黑屏 手机突然黑屏了死机状态怎么办 苹果平板死机不能重启怎么办 韩众平板死机了怎么办 苹果平板输入密码多次停用怎么办 ld密码被停用了怎么办 档案被自己丢了怎么办 手机在厂里丢了怎么办 在厂里借工具丢了怎么办 导出的考勤没有姓名怎么办 退休时档案丢了怎么办 职工与企业没有劳资怎么办 去大学报道的档案袋丢失怎么办 档案入学毕业年份写错怎么办 从事业单位辞职后人事档案怎么办 老师辞职不给批怎么办 公办教师去私立学校档案怎么办 辞职后档案不给怎么办 档案不小心拆了怎么办 退休职工档案年龄有涂改怎么办 养老金原始档案找不到怎么办退休 寄辞职信不接收怎么办 公司不给办离职怎么办 离职手续表填写错误怎么办 退货少退了个配件怎么办 小米8拖影严重怎么办 被兼职中介骗了怎么办