awk太牛了,博大精深,学不透,学了不用,又忘。

所以花了一天,自己总结了基础,以后就当字典查(容易忘)。有不对的地方,忘大家指出。

[ganzl@cmdb ~]$ more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

概念:

(字段,记录,就是行跟列的意思啦,我自己取的):

字段:上面/etc/passwd内有7个字段。以":"分割,$1就是root。$0,$n:当前记录,当前记录的第N个字段
记录:有两行记录

这4个概念比较重要:
NF:字段数量
NR:记录行数
$NF:当前行最后一个字段的内容
$NR:当前记录的第NR个内容
例子:

awk '{FS=":"}NR==7||NF==8{print NF,$NF,NR,$NR}' /etc/passwd
awk -F: 'NR==2||NF==8{print NF,$NF,NR,$NR}' /etc/passwd

FS:字段分割符号,默认是空格
RS:记录分割符号,默认是空格

例子:

#!/bin/sh
exec <host.list
i=1
while read line
do
if [ $i -eq 4 ];then
echo -n "`echo $line|awk '{print $1}'`">>tmp.host
else
echo -n "`echo $line|awk '{print $1}'`,">>tmp.host
fi
((i++))
done df
df
df
df
dddddddddddddddddddddddddddddddd

3.txt

awk 'BEGIN{FS="\n";RS=""}{print $1,$2,$3}' 3.txt  #不在同一行--(变成)-->同一行,同时空白记录--(变成)-->""

ORS:记录输出分隔符
OFS:字段输出分隔符
例子:

awk 'BEGIN{FS="\n";RS="";OFS="###";ORS="???"}{print $1,$2,$3}' 3.txt

运算符

赋值运算符:
= += -= *= /= %= ^= **= 赋值语句

逻辑运算符:
||逻辑或 &&逻辑与

正则运算符:
~ !~ 匹配正则表达式和不关系运算符

关系运算符:< <= > >= != ==

算术运符:
+ - 加,减
* / & 乘,除与求余
+ - ! 一元加,减和逻辑非
^ *** 求幂
++ -- 增加或减少,作为前缀

三目运算符:?

例子:
awk 'BEGIN{a=5;a+=4;print a}'
awk 'BEGIN{a=1;b=2;print(a>2||b<9)}'
echo|awk 'BEGIN{a="aaa1000dbbb"}a~/abc/{print "ok"}'
awk 'BEGIN{a=11;if(a>9){print "ok"}}'
awk 'BEGIN{a=1;print a++,++a}'
awk 'BEGIN{a="b";print a=="c"?"yes":"no"}'

awk的正则

^ :行首定位符 /^root/ 匹配所有以 root 开头的行
$ :行尾定位符 /root$/ 匹配所有以 root 结尾的行
. :匹配任意单个字符 /r..t/
* :匹配 0个或多前导字符 (包括回车 ) /a*ool/ /a*ool/ 匹配0个或多a之后紧跟着ool的行,比如 ool ,aaaaool aaaaool 等
+ :匹配 1个或多前导字符 /a+b/ 匹配 1个或多个 a加 b的行,比如ab,aab 等
? :匹配 0个或 1个前导字符 /a?b/ 匹配 b或 ab 的行
[] :匹配指定字符组内的任意一个字符 /^[abc] 匹配以字母 a或 b或 c开头的行 开头的行
[^] :匹配不在指定字符组内任意一个字符 /^[^abc]/ 匹配不以字母 a或 b或 c开头的行
() :子表达式组合 /(rool)+/ 表示一个或多rool组合,当有一些 组合,当有一些 字符需要组合时,使用括号起来
| :或者的意思 /(root)|B/ 匹配 root 或者 B的行
\ :转义字符 /a \/\// 匹配 a//
~,!~:  匹配,不匹配的条 件语句 $1~/root/ 匹配第一个字段包含符root的所有 记
x{m} :x重复 m次 /(root){3}/ 注意这个括号
x{m,} :x重复至少 m次 /(root){3,}/
X{m,n} :x重复至少 m次,但不超过 n次

例子:
awk '/tcpdump/{print $0,NR}' /etc/passwd
ifconfig eth2|awk -F'[" ":]+' 'NR==2{print $4,$6}'|awk '{print $1}'
awk -F: '$1=="root"{print $0}' /etc/passwd netstat -nal| awk '/^tcp/{s[$NF]++}END{for(i in s)print i,s[i]}'
统计web服务器访问IP:
awk '{count[$1]++}END{for (ip in count){print ip,count[ip]}}' /var/log/httpd/access_log

awk的涂鸦的更多相关文章

  1. 【Win 10 应用开发】InkToolBar——涂鸦如此简单

    从WPF开始,就有个InkCanvas控件,封装了数字墨迹处理相关的功能,Silverlight到Win 8 App,再到UWP应用,都有这个控件,所以,老周说了3688遍,凡是.net基础扎实者,必 ...

  2. awk命令简介

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  3. AR创意分享:儿童涂鸦遇上程序绘图

    第一节 临摹 小明经常临摹同桌小美的画作. 美术课上,老师表扬了小美的新作. 图1.1 小美的作品<蒙娜·毛虫的微笑> 临,是照着原作画:摹,是用薄纸张蒙在原作上面画. 第二节 借画 小明 ...

  4. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  5. awk应用

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...

  6. 3.awk数组详解及企业实战案例

    awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...

  7. shell——awk

    awk -F"分隔符" "command" filename awk -F":" '{print $1}' /etc/passwd 字段引用 ...

  8. 【Linux】AWK入门

    什么是AWK AWK是一种用于处理文本的编程语言工具,一个模式匹配程序.一个典型的示例是将数据转换成格式化的报告. 在命令行输入如下awk命令: awk -F":" '{ prin ...

  9. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od

    awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk ''  | output 1.首先要知道形式 awk 'command' fi ...

随机推荐

  1. c#操作Excel

    Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格.Excel以其功能强大,界面友好等受到了许多用户的欢迎.在设计应用系统时,对于不同的用户,他们对于打印的需求是不一样的,如果要 ...

  2. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  3. AttributeError: '_csv.reader' object has no attribute 'next'

    我在使用pyhon3.4运行以下代码时报错:AttributeError: '_csv.reader' object has no attribute 'next' import csv import ...

  4. PSP(11.24~11.30)

    27号 类别c 内容c 开始时间s 结束e 中断I 净时间T 作业 构建执法.写博客 14:00 14:40 0m 40m 28号 类别c 内容c 开始时间s 结束e 中断I 净时间T java 编码 ...

  5. 第一周:设计一个简易ATM取款机简易程序(2)

    1.了解用户对ATM取款机功能需求如下: 2.新建一个login函数使用for循环方法和if选择方法编写登陆界面用来及设置ATM内用户的金额和取款机内的金额: 3.使用新建函数方法及if选择方法编写登 ...

  6. 学习indy组件之一idhttp的使用方法

    登录 注册 百度首页 新闻 网页 贴吧 知道 音乐 图片 视频 地图 百科 文库 经验 搜索答案我要提问 首页 分类 公社 知道行家 问医生 高质量问答 经验 个人中心手机知道开放平台   关于del ...

  7. android 程序代码执行adb

    Runtime.getRuntime().exec("adb pull /dev/graphics/fb0 C:/fb1"); Runtime. getRuntime().exec ...

  8. CSS + DIV 让页脚始终底部

    一 前言 经常设计页面时用到三层DIV,头DIV与脚DIV一般固定高度,而中间层DIV根据内容的多少,高度不定,我们经常希望但内容很少时,脚DIV保持在底部,当内容很多时,脚DIV被中间内容挤到下面, ...

  9. 用 pyvenv 创建几个不相互影响的python虚拟环境

    IN MY UBUNTU python2的环境控制: sudo apt-get install virtualenv 创建: virtualenv --no-site-packages  [环境搭建目 ...

  10. 关于ORACLE中配置文件的问题

    关于windows服务和oracle的问题的解决 <?xml version="1.0" encoding="utf-8"?><configu ...