AWK Demo

  AWK is so poweful.

#!/bin/bash
#File: script.sh
#Author: lxw
#Time: 2014-08-08 #Usage: ‘awk‘ demo.

#$0: The whole line.    $1: The first column.    $2: The second column.    ...
echo -e "\nDEMO1:-----------------------------------------------------"
head -n 5 ./demo.txt|awk ‘BEGIN{FS="|"}{print $0}‘

echo -e "\nDEMO2: PRINTF FORMAT---------------------------------------"
head -n 20 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"}{printf "%-8s%-5s%-10s\n", $1, $2, $4}‘

echo -e "\nDEMO3: FILTER-----------------------------------------------"
head -n 30 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} $2=="CN" && $3=="ipv4" {printf "%-8s%-5s%-10s\n", $1, $2, $4}‘

echo -e "\nDEMO4: FS-NR-NF-FILENAME------------------------------------"
head -n 40 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} $2=="CN" || NR==1 {printf "%-10s%-03d%-3d%-8s%-5s%-10s\n", FILENAME, NR, NF, $1, $2, $4}‘

echo -e "\nDEMO5: OFS--------------------------------------------------"
head -n 50 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} $2=="CN" || NR==1 {print FILENAME, NR, NF, $1, $2, $4}‘ OFS="\t"

#String match
#@1:‘~‘ means to match.    @2:The string between // is the RE.
echo -e "\nDEMO6: String Match------------------------------------------"
head -n 50 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} $3 ~ /ip.4/ || NR==1 {print NR, $1, $2, $3, $4}‘ OFS="\t"

echo -e "\nDEMO7: The line which contains the specific string.----------"
head -n 60 ./demo.txt|tail -n 10|awk ‘/.*12.*|.*14.*/‘

echo -e "\nDEMO8: The field which DOES NOT contain the specific string.--"
head -n 60 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} $6 !~ /.*0412.*|.*0414.*/‘

#Split the file.
echo -e "\nDEMO9: Split the file.----------------------------------------"
head -n 70 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} $2 != "" {print > $2}‘
head -n 70 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} $2 != "" {print NR, $4 > $2"-1"}‘
head -n 70 ./demo.txt|tail -n 10|awk ‘BEGIN{FS="|"} {if($2 ~ /CN/) print > "cn.txt"; else if($2 ~ /TH/) print > "th.txt"; else print > "others.txt";}‘

#Count.
echo -e "\nDEMO10: Count.------------------------------------------------"
cat ./demo.txt|awk ‘BEGIN{FS="|"} $2 != "" {arr[$2]++}; END{for(i in arr) print i, ", ", arr[i];}‘

#Reference:
#http://coolshell.cn/?s=awk
#http://xu020408.blog.163.com/blog/static/26548920132704942773/

The demo.txt is like this:

apnic|CN|ipv4|223.223.176.0|4096|20100813|allocated|A9294C05
apnic|CN|ipv4|223.223.192.0|4096|20100806|allocated|A9237638
apnic|JP|ipv4|223.223.208.0|2048|20100803|allocated|A92B1B09
apnic|HK|ipv4|223.223.216.0|1024|20100730|allocated|A91AEBC2
apnic|SG|ipv4|223.223.220.0|1024|20110411|allocated|A9198FAD
apnic|JP|ipv4|223.223.224.0|8192|20100730|allocated|A924F5F3
apnic|IN|ipv4|223.224.0.0|1048576|20100914|allocated|A9199197
apnic|CN|ipv4|223.240.0.0|524288|20100803|allocated|A9248097
apnic|CN|ipv4|223.248.0.0|262144|20100713|allocated|A92869B9
apnic|AU|ipv4|223.252.0.0|32768|20100727|allocated|A91776C8
apnic|CN|ipv4|223.252.128.0|32768|20110131|allocated|A92E14F7
apnic|KR|ipv4|223.253.0.0|65536|20100728|allocated|A925D762
apnic|CN|ipv4|223.254.0.0|65536|20100723|allocated|A92FD265
apnic|CN|ipv4|223.255.0.0|32768|20100810|allocated|A92FEB6F
apnic|HK|ipv4|223.255.128.0|16384|20100810|allocated|A9132B1E
apnic|KR|ipv4|223.255.192.0|8192|20100802|allocated|A9249F52
apnic|ID|ipv4|223.255.224.0|2048|20100809|allocated|A92ED542
apnic|AU|ipv4|223.255.232.0|1024|20100812|allocated|A9190386
apnic|CN|ipv4|223.255.236.0|1024|20110311|allocated|A929E12C
apnic|HK|ipv4|223.255.240.0|1024|20100803|allocated|A91846F6
apnic|IN|ipv4|223.255.244.0|1024|20100804|allocated|A92523BF
apnic||ipv4|223.255.248.0|1024||reserved|
apnic|CN|ipv4|223.255.252.0|512|20110414|allocated|A92E1062
apnic|SG|ipv4|223.255.254.0|256|20110408|assigned|A91B8C6C
apnic|AU|ipv4|223.255.255.0|256|20110811|assigned|A9173591
apnic|JP|ipv6|2001:200::|35|19990813|allocated|A916B6AA
apnic|JP|ipv6|2001:200:2000::|35|20030423|allocated|A916B6AA
apnic|JP|ipv6|2001:200:4000::|34|20030423|allocated|A916B6AA
apnic|JP|ipv6|2001:200:8000::|33|20030423|allocated|A916B6AA
apnic||ipv6|2001:201::|32||available|
apnic||ipv6|2001:202::|31||available|
apnic||ipv6|2001:204::|30||available|
apnic|SG|ipv6|2001:208::|35|19990827|allocated|A919DB08
apnic|SG|ipv6|2001:208:2000::|35|20030306|allocated|A919DB08
apnic|SG|ipv6|2001:208:4000::|34|20030306|allocated|A919DB08
apnic|SG|ipv6|2001:208:8000::|33|20030306|allocated|A919DB08
apnic||ipv6|2001:209::|32||available|
apnic||ipv6|2001:20a::|31||available|
apnic||ipv6|2001:20c::|30||available|
apnic||ipv6|2001:210::|35||reserved|
apnic||ipv6|2001:210:2000::|35||available|
apnic||ipv6|2001:210:4000::|34||available|
apnic||ipv6|2001:210:8000::|33||available|
apnic||ipv6|2001:211::|32||available|
apnic||ipv6|2001:212::|31||available|
apnic||ipv6|2001:214::|30||available|
apnic|JP|ipv6|2001:218::|35|19990922|allocated|A91D8D8A
apnic|JP|ipv6|2001:218:2000::|35|20020724|allocated|A91D8D8A
apnic|JP|ipv6|2001:218:4000::|34|20020724|allocated|A91D8D8A
apnic|JP|ipv6|2001:218:8000::|33|20020724|allocated|A91D8D8A
apnic||ipv6|2001:219::|32||available|
apnic||ipv6|2001:21a::|31||available|
apnic||ipv6|2001:21c::|30||available|
apnic|KR|ipv6|2001:220::|35|19991006|allocated|A92B4E0E
apnic|KR|ipv6|2001:220:2000::|35|20031126|allocated|A92B4E0E
apnic|KR|ipv6|2001:220:4000::|34|20031126|allocated|A92B4E0E
apnic|KR|ipv6|2001:220:8000::|33|20031126|allocated|A92B4E0E
apnic||ipv6|2001:221::|32||available|
apnic||ipv6|2001:222::|31||available|
apnic||ipv6|2001:224::|30||available|
apnic||ipv6|2001:228::|35||reserved|
apnic||ipv6|2001:228:2000::|35||available|
apnic||ipv6|2001:228:4000::|34||available|
apnic||ipv6|2001:228:8000::|33||available|
apnic||ipv6|2001:229::|32||available|
apnic||ipv6|2001:22a::|31||available|
apnic||ipv6|2001:22c::|30||available|
apnic|KR|ipv6|2001:230::|35|19991124|allocated|A9267E82
apnic|KR|ipv6|2001:230:2000::|35|20020802|allocated|A9267E82
apnic|KR|ipv6|2001:230:4000::|34|20020802|allocated|A9267E82
apnic|KR|ipv6|2001:230:8000::|33|20020802|allocated|A9267E82
apnic||ipv6|2001:231::|32||available|
apnic||ipv6|2001:232::|31||available|
apnic||ipv6|2001:234::|30||available|
apnic|TW|ipv6|2001:238::|35|20000208|allocated|A912C007
apnic|TW|ipv6|2001:238:2000::|35|20020711|allocated|A912C007
apnic|TW|ipv6|2001:238:4000::|34|20020711|allocated|A912C007
apnic|TW|ipv6|2001:238:8000::|33|20020711|allocated|A912C007
apnic||ipv6|2001:239::|32||available|
apnic||ipv6|2001:23a::|31||available|
apnic||ipv6|2001:23c::|30||available|

Reference:
AWK简明教程: http://coolshell.cn/articles/9070.html
AWK简明教程: http://xu020408.blog.163.com/blog/static/26548920132704942773/

AWK Demo

时间: 2024-08-26 17:42:35

AWK Demo的相关文章

开源的PaaS方案:在OpenStack上部署CloudFoundry (二)部署OpenStack

硬件要求 安装OpenStack 1 安装CentOS 65系统并清空iptables防火墙规则 2 安装系统需要的工具包包括Openstack依赖的和CloudFoundry依赖的 3 安装EPEL repo 4 Upgrade 当前系统 5 安装openstack repo 目前CloudFoundry最高只能支持Havana版的Openstack 6 安装packstack 7 同步时间 8 安装单节点openstack 配置Openstack 0 安装后的Openstack Dashbo

一个awk命令的demo

awk -F'\x1' '{if($5 ~/99000537588688/ && $8 ~/6W2o63/){print $0}}' /home/james/logs/game_logs/20140819/prefix_* | awk -F'\x3' '{print $2}' | awk -F'\x2' '{for(i=0; i<NF; i++)print $i}'> ~/20140819_events

Shell脚本三剑客(awk、sort、uniq)内含多个小Demo

awk工具 在Linux/UNIX系统中,awk是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以再无交互的情况下实现相当复杂的文本操作,被广泛应用于Shell脚本,完成各种自动化配置任务. 1.awk常见用法:通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号"{}"用于设置对数据进行的处理动作.awk 可以直接处理目标文件,也可以通过"-f"读取脚本对目标文件进行处理. D

grep Demo

最近在学习Linux的几个非常强大的命令awk, sed, grep. 之前对这些命令只是有非常皮毛的了解. 最近稍微深入的对这些命令进行一些学习.sed的主要功能如下: @1: 正则匹配某个字符串. @2: grep具备递归搜索文件/目录功能. #!/bin/bash #File: grepDemo.sh #Author: lxw #Time: 2014-08-21 #Usage: Demonstration for grep. main(){ #The following 2 lines a

那些年我用awk时踩过的坑——awk使用注意事项

由于项目经历原因,经常使用awk处理一些文本数据.甚至,我特意下载了一个windows上的awk:gawk.exe,这样在windows上也能享受awk处理数据的方便性,. 俗话说,"常在河边走,哪能不湿鞋",使用awk过程中碰上过不少坑,这里稍总结一下,希望对大家有帮助. 1 FS问题 看看这两个awk脚本: cat demo_1.txt demo_2.txt 1|2|3|4| 1|@|2|@|3|@|4|@| awk -F '|' '{print $2}' demo_1.txt;

日志分析查看——grep,sed,sort,awk运用

概述 我们日常应用中都离不开日志.可以说日志是我们在排查问题的一个重要依据.但是日志并不是写了就好了,当你想查看日志的时候,你会发现线上日志堆积的长度已经超越了你一行行浏览的耐性的极限了.于是,很有必要通过一些手段来高效地辅助你来快速的从日志中找到你要找的问题.本文通过一个从项目中衍生出来的例子从查找日志,筛选日志和统计日志3个方面层层递进来简述日志文件查看中一些有用的手段.(注:在linux环境下) 目录 0.查找关键日志grep 1.查找关键日志grep 2.精简日志内容 sed 3.对记录

流编辑器-awk

awk 流编辑器sed,用于对行进行删除,替换等操作,awk更适合用来排版. awk工作流程 awk将文本的内容逐行读取到内存中,awk会对读取进内存的行通过某种分隔符(默认为空格\t)进行分块,分块后会对各个块命名$0-整个行,$1-第一个块,$2-第二个块...$n-第n个块.此时可以指定awk操作的块.同sed一样,awk会通过模式匹配需要操作的行,不同的是对于未匹配的行,awk会将其忽略. #ifconfig eth0 | awk '/inet addr/{print $2}' | aw

awk中文手册

1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l        awk 适于解决哪些问题 ? l        awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模式及特性, 本手册系由一些较具代表性的范例及其题解所构成; 各范例由浅入深, 彼此间相互连贯,范例中并对所使用的awk语法及指令辅以必要的说明. 有关awk的指令, 函数,...等条列式的说明则收录于附录中, 以利读者往后撰写程序时查阅. 如此编排, 可让读者在短时间内顺畅地学会使用awk来解决问题

【译】 AWK教程指南 11递归程序

awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束--该变量不论在function外或 function内皆可使用,只要变量名称相同所使用的就是同一个变量,直到程序结束.因递归函数内部的变量,会因它调用子函数(本身)而重复使用,故编写该类函数时应特别留心. 例如:执行 awk ' BEGIN { x = 35 y = 45 test_variable( x ) printf("Return t