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
怎么样,爽了吗!
相关推荐
chenpro 2020-07-04
fendou00sd 2020-06-16
RealJianyuan 2020-06-14
cwgxiaoguizi 2020-06-05
chenpro 2020-06-02
Neptune 2020-05-31
老谢的自留地 2020-05-09
YukiRain 2020-05-08
baobaozai 2020-04-29
Proudoffaith 2020-04-08
fenxinzi 2020-03-01
zhiliang 2020-01-31
wannagonna 2020-01-13
wandererdl 2019-12-25
chenchuang 2020-01-25
jyj00 2020-01-09
fendou00sd 2020-01-07
fendou00sd 2020-01-06
PHP学习笔记 2020-01-06