shell语句记录-awk

 cat ./daily_uv/daily_uv_20140104 | awk '{fr[$1]+=$3; k=$1 "_" $2; av[k]+=$3;} END{for (k in fr) {print k,fr[k]} for (k in av) {print k,av[k]}}' 

 

1.  最基本的用法

awk '{print $1}' ./daily_messageEnter_uv/daily_messageEnter_uv_20131226

即 awk '{*****}' filename

 

2.  awk的格式化输出,和C语言的printf没什么两样

如awk '{printf "%s %s", $1,$2}' ./filename

注意!!!

此时输出的效果与awk '{print $1}' 不同,1中的print会自动换行,但这里的printf如果不指定的话是连着输出的,输出方式:输出第一列的第一行,第二列的第一行,然后是第一列的第二行,第二列的第二行 ………………

如果希望换行,那么:加上\n

即awk '{printf "%s %s\n", $1,$2}' ./filename

也可以加上\t等

 

3.  过滤记录

awk '$1=="android" && $3>=10000 ' filename
输出  android 3.4.3 82256 65735
    android 3.2.1 10503 8540
    android 3.3.0 82071 66686
    android 3.4.0 18517 15031

此时四列满足条件的数据都将被输出(默认情况)

如果需要输出指定的数据需要使用前面提到的输出方法。

$ awk '$1=="android" && $3>=10000 {print $1,$2}  '  filename

此时可以总结这样的规律:awk的语句是写在'***' 中的,{**}中写输出的内容,语句中间没有符号,顺着向后写即可

注意!!!!

$1=="android" 这里的字符串需要用双引号

  3.1  输出行号

  awk '$1=="android" && $3>=10000 {print NR,$1,$2}’ filename

 

4.  指定分隔符

 awk -F ’;‘ '{print NR,$1,$2}‘

-F可以指定分隔符,默认是Tab或是空格

 

  4.1  内建变量

  awk的一些内建变量:

$0当前记录(这个变量中存放着整个行的内容)
$1~$n当前记录的第n个字段,字段间由FS分隔
FS输入字段分隔符 默认是空格或Tab
NF当前记录中的字段个数,就是有多少列
NR已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS输入的记录分隔符, 默认为换行符
OFS输出字段分隔符, 默认也是空格
ORS输出的记录分隔符,默认为换行符
FILENAME当前输入文件的名字

如果是多个分隔符可以写成

awk -F '[,;]'

指定输出分隔符 awk -F OFS="\t" '{print $1}'   filename

 

5.  字符串匹配

awk '$1 ~ /an.*|ipad/ {print $0}'    filename

‘|’符号的左右不要随意添加空格

awk '$1 ~ /an.*|ipad/ || NR==1 {print $0}'    filename

即输出表头

awk可以像grep一样的去匹配第一行,就像这样:

awk '/ipad/' filename

模式取反的例子:

awk '$1 !~ /an.*|ipad/ {print $0}'  filename

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


转载于:https://www.cnblogs.com/lingNote/p/3507836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值