义臻的博客

不忘初心,不舍昼夜!

awk简明用法
这几天在写数据库脚本,需要频繁的处理字符文件,笔者之前都是用java程序处理字符文件,结果看到同事用awk几秒钟就搞定了一个处理,觉得太牛逼了,于是花时间学习了下。

本文旨在帮助awk新手快速熟悉awk的常见用法,笔者会尽量把文章写得像清纯的女神一样撩起你的兴趣,不过最终还得你花力气自己撸

首先,我们使用netstat的输出作为源文件:
netstat -ano >> netstat.txt


我们发现netstat.txt中的信息太乱了,我们仅仅需要首列是tcp的行,当然第二行的标签也需要保留:
cat netstat.txt | awk '$1=="tcp" || NR==2 {print $0}' >> netstat1.txt


netstat1.txt文件还算干净,我们需要第六列匹配"LISTEN"的行,并格式化输出(awk的格式化输出和C语言相同):
cat netstat1.txt | awk '$6 ~ /LISTEN/ || NR==1 {print $0}' >> netstat2.txt


对于netstat2.txt文件,仅仅需要它的第1,4,6列,并格式化输出(awk的格式化输出和C语言相同):
cat netstat2.txt | awk '{printf "%5s %20s %10s\n",$1,$4,$6}' >> netstat3.txt


对于netstat3,.txt,不需要Local列的端口号:
cat netstat3.txt | awk '{print $1,$3,$2}' | awk -F ':' '{print $1}' >> netstat4.txt


把netstat4.txt按照第3列的内容拆分成多个文件:
cat netstat4.txt | awk '{print > $3}'


下面进行一些补充:
~表示匹配模式
!~表示不匹配模式
/***/中夹着的是模式内容
$0	整行内容
$1~$n	当前行的第n个字段,字段间由FS分隔
FS	输入字段分隔符 默认是空格或Tab
NF	当前记录中的列的数量
NR	行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR	行号,从1开始,与NR不同的是,这个值会是各个文件自己的行号
RS	输入的记录分隔符, 默认为换行符
OFS	输出字段分隔符, 默认也是空格
ORS	输出的记录分隔符,默认为换行符
FILENAME	当前输入文件的名字


对于文件test.txt
Marry,2143,78,84,77
Jack,2321,66,78,45
Tom,2122,48,77,71
Mike,2537,87,97,95
Bob,2415,40,57,62


使用分隔符获取第一列,并指定输出分隔符
cat test.txt | awk -F ',' '{print $1,$2}' OFS='----' >> test1.txt


对于test.txt,写一个awk脚本来处理它:
$ cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
    math = 0
    english = 0
    computer = 0
 
    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
    printf "---------------------------------------------\n"
}
#运行中
{
    math+=$3
    english+=$4
    computer+=$5
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
    printf "---------------------------------------------\n"
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}


结果如下:
$ awk -f cal.awk score.txt
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------
  TOTAL:       319      393      350
AVERAGE:     63.80    78.60    70.00


怎么样,爽了吗!






阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yizhenn/article/details/52384597
个人分类: Linux
想对作者说点什么? 我来说一句

awk用法__都是例子

2010年06月30日 28KB 下载

AWK用法详解(非常精辟)

2011年06月29日 532KB 下载

LINUX的awk和sed的常用用法

2010年01月25日 57KB 下载

awk命令详解

2014年09月14日 68KB 下载

linux bash之 awk用法

2011年07月25日 16KB 下载

awk手册

2008年07月22日 21KB 下载

没有更多推荐了,返回首页

不良信息举报

awk简明用法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭