linux命令——awk

来源:互联网 发布:php is a 编辑:程序博客网 时间:2024/06/08 14:57

今天被面试有个问题一脸懵逼……(。ì _ í。)
原因就在于上次总结linux常用命令时候忘记扩展一个知识点了!
awk……这是啥 没用过aaaaa…… But,不会不怕 学就可以了嘛~


一、awk是什么
linux下的文本、数据处理工具

二、awk使用方式
1.命令行方式 (三、里面会点详细说明)

awk [-F  field-separator] + 'awk命令' + awk_test.txt

[-F域分隔符]可选,文件的每一行中,由-F分开的每一项称为一个域。
2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,首行使用#!/bin/awk

3.将所有的awk命令插入一个单独文件,然后调用
awk -f script.awk awk_test.txt
其中,-f选项加载script.awk中的awk脚本

三、使用语法
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
BEGIN:初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
//:正则或字符串,匹配代码块
{}:包含一条或多条命令,多条命令使用分号分隔
END:结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾信息

#常用内置变量(反正我是背不下来 会用就行了。。。) ARGC               命令行参数个数 ARGV               命令行参数排列 ENVIRON            支持队列中系统环境变量的使用 FILENAME           awk浏览的文件名 FNR                浏览文件的记录数*FS                 设置输入域分隔符,等价于命令行 -F选项*NF                 经过-F分割之后,每行的个数*NR                 行数*OFS                输出域分隔符(print $1,$2时使用) ORS                输出记录分隔符 RS                 控制记录分隔符
#eg:awk_test.txt11111 --22222 --33333--4444--5555--666611111,  22222,  33333-- 4444-- 5555-- 666611111:  22222:  33333-- 4444-- 5555-- 6666

1、-F是什么鬼,$n是什么

#awk -F'-- ' '{print $1 $2}' awk_test.txt#$1$2代表第一列、第二列(默认每行按空格分割,这里按'-- '分割,$1 $2为分割后的)11111 --22222 --33333--4444--5555--666611111,  22222,  33333444411111:  22222:  333334444
#awk -F'-- ' '{print $1,$2}' awk_test.txt11111 --22222 --33333--4444--5555--6666 11111,  22222,  33333 444411111:  22222:  33333 4444

敲黑板:
i、print $1 $2 和 print $1,$2 是不一样的!
空格这种:连续输出
逗号这种:输出后按空格分割,如果想修改,使用awk -F’– ’ ‘{print $1,$2}’ OFS=’……’ awk_test.txt
ii、$0代表一行 $n 代表-F分割之后的第n段

2、应用
2.1 输出第一列的和:

awk 'BEGIN {count=0} {count=count+$1;} END{print count}' awk_test.txt#输出:33333

2.2.1 打印某个文件夹下的文件占用的字节数:

ls -l |awk '{print $5}'

2.2.2 统计某文件夹下的文件占用的字节数,输出文件大小>1024Byte的文件(一般都是文件夹),输出这些文件个数:

ls -l |awk 'BEGIN {size=0;count=0;print "start"} {if($5>1024){count=count+1; print"size: ", $5/1024, "K";}} END{print "[end]count=", count}'#输出如下:startsize:  1.46094 Ksize:  1.92578 K[end]count= 2
0 0
原创粉丝点击