awk文本分割输出工具(按列输出工具)

awk [options] ' PATTERN { action } ' file1, file2, ...

内置变量:

FS:field separator,输入列分隔符(哪个字符分割两个列),默认是空白字符;
RS:Record Separator,输入换行符(哪个字符分割行),默认是换行符;
OFS:Output Field Separator,输出列分隔符;
ORS:Output Row Separator,输出行分隔符; NR:The number of input records,awk所处理的行数(不同文件顺序计数);
FNR:awk处理当前文件时所处理的行数(不同文件各自计数);
NF:Number of field,当前行的字段总数(总列数);

例如现有一个文本文件,名为test.txt,内容为

this is a test mail
this is the second line.

1、输出整段文本

awk '{ print $0 }' test.txt

2、输出文本的第二列和第三列

awk '{ print $2, $3 }' test.txt

结果:

is a
is the

3、指定输出的分隔符为“##”,输出前三列

awk 'BEGIN{OFS="##"}{print $1, $2, $3}' test.txt

结果为:

this##is##a
this##is##the

4、指定输出分隔符“:",输出前两列

awk 'BEGIN{OFS=":"}{print $1, $2}' test.txt

结果:

this:is
this:is

5、输出时插入指定文本,例如插入hello

awk 'BEGIN{OFS=":"}{print $1, "hello", $2}' test.txt

结果:

this:hello:is
this:hello:is

6、直接输出文字

awk 'BEGIN{ print "line one\nline two\nline three" }'

结果:

line one
line two
line three

7、统计每行有多少列

awk '{ print NF }' test.txt

结果:


8、输出文件的最后一列

awk '{ print $NF }' test.txt

结果:

mail
line.

9、输出文件倒数第二列

awk '{ print $(NF-1) }' test.txt

结果:

test
second

10、awk命令中定义变量 -v 变量名="变量值"

awk -v variable="hello world" 'BEGIN{print variable}'
awk 'BEGIN{variable="hello world"; print variable}'

结果:

hello world

11、printf显示输出

printf format, item1, item2, ...

format包括:

%c:显示字符ASCII码
%d,%i:十进制整数
%e,%E:科学计数法
%f:浮点数
%g,%G:科学计数或浮点数
%s:字符串
%u:无符号数
%%:显示%自身

例如:

awk '{printf "%10s\n", $3}' test.txt

结果:

         a
the

12、赋值操作符、算术操作符、字符串操作符

赋值:=  +=  -=  *=  /=  %=  ^=  **=
算术:-x +x x^y x*y x/y x-y x+y x%y
比较:x < y x>=y x!=y x~y(模式匹配)
条件表达式:selector?if-true-exp:if-false-exp
逻辑:&& ||

如,查找/etc/passwd下以字母r开头的用户名

awk -F: '/^r/{print $1}' /etc/passwd
awk 'BEGIN{FS=":"}/^r/{print $1}' /etc/passwd

结果:

root

13、显示uid大于500的用户名(非系统用户)

awk -F: '$3>=500{print $1, $3}' /etc/passwd

结果:

cactiuser
test001
test002

14、显示默认登录脚本为bash的用户(模式匹配)

awk -F: '$7~"bash$"{print $1, $7}' /etc/passwd

结果:

root /bin/bash
mysql /bin/bash
cactiuser /bin/bash
test001 /bin/bash
test002 /bin/bash

15、awk执行前/执行后运行一次,BEGIN/END

例如,加入title

awk 'BEGIN{print "ROW1    ROW2    ROW3"}{printf "%-8s%-8s%-8s\n", $1, $2, $3}' test.txt

结果:

ROW1    ROW2    ROW3
this is a
this is the

在加入结尾信息

 awk 'BEGIN{print "ROW1    ROW2    ROW3"}{printf "%-8s%-8s%-8s\n", $1, $2, $3}END{print "date:--/--/--"}' test.txt

结果:

ROW1    ROW2    ROW3
this is a
this is the
date:--/--/--

16、控制语句(if-else)

例如,判断是root就返回Admin,其他用户就返回Common User

awk -F: '{if ($1=="root") print $1, ": admin"; else print $1, ": Common User"}' /etc/passwd

结果:

root : admin
bin : Common User
daemon : Common User
adm : Common User
lp : Common User

再如,统计一共有多少个uid大于500的用户(非系统用户)

awk -F: -v sum= '{if ($3>=500) sum++}END{print sum}' /etc/passwd

结果为非系统用户个数

17、while循环列

比如,test.txt文件中,打印出所有大于4个字符的列

awk '{i=1; while (i<=NF) { if (length($i)>=4) {print $i}; i++}}' test.txt
awk '{for(i=1;i<NF;i++){ if (length($i)>=4) {print $i} }}' test.txt

结果

this
test
mail
this
second
line.

18、next结束本行处理,进入下一行处理

19、数组

awk数组下标从1开始,并可以是任意字符串。

例如,统计不同登录shell对应的用户数量

awk -F: '{shell[$NF]++}END{for(A in shell) {print A, shell[A]}}' /etc/passwd

结果:

/sbin/shutdown
/bin/bash
/sbin/nologin
/sbin/halt
/bin/sync

再如,统计TCP网络连接中,状态是LISTEN和ESTABLISHED的条目数量

netstat -tan | awk '/^tcp/{STATE[$NF]++}END{for(A in STATE) {print A, STATE[A]}}'

结果:

ESTABLISHED
LISTEN

再如,统计ngiinx日志中ip地址访问次数,并按由多到少排序

 awk '{count[$1]++}; END{ for(ip in count) print ip,": " count[ip]}' /usr/local/nginx/logs/access.log | sort -n -k3 -r

结果类似:

185.130.5.224 :
103.41.53.252 :
120.26.55.211 :
120.26.207.203 :
23.251.63.45 :
45.79.204.72 :
169.229.3.91 :
120.26.227.63 :
121.42.0.35 :
58.96.181.111 :
189.141.160.11 :
123.56.233.103 :

awk用法举例的更多相关文章

  1. 【转】awk 里的substr函数用法举例

    awk 里的substr函数用法举例: 要截取的内容:2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ...

  2. sed和awk用法

    sed和awk用法 Sed sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为 ...

  3. awk 用法(使用入门)

    转自:http://www.cnblogs.com/emanlee/p/3327576.html awk 用法:awk ' pattern {action} '  变量名    含义 ARGC   命 ...

  4. c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  5. awk用法小结(作者总结)

    http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d. ...

  6. linux awk用法

    awk是一个强大的文本分析工具,在对数据进行分析并生成报告时显得尤为强大. 使用方法:awk [options]  'BEGIN{ commands } pattern{ commands } END ...

  7. 转shell中的awk用法详解

        awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息 调用awk:   第一种,命令行方式 ...

  8. 收集整理的awk用法小结

    awk 用法:awk ‘ pattern {action} ‘ 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输 ...

  9. 12. nc/netcat 用法举例

    nc命令用法举例 什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可 ...

随机推荐

  1. Android中的六大布局

    继承关系图: 布局XML文件中常用属性: android:layout_width 宽度  android:layout_height 高度 可能的取值为match_parent,wrap_conte ...

  2. bzoj1415

    比较简单的数学期望,先预处理出当聪聪在i,可可在j时聪聪往哪个点走然后做dp即可,我用了记忆化搜索实现 type node=record po,next:longint; end; ..,..] of ...

  3. BZOJ3188: [Coci 2011]Upit

    3188: [Coci 2011]Upit Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 72  Solved: 24[Submit][Status] ...

  4. 【转】我的电脑最近忽然开不了机,启动修复也无法修复,win7系统。开机的时候如果不点启动修复直接正常启动

    原文网址:http://wenda.haosou.com/q/1356139178064356 你好,电脑开机蓝屏主要是:“磁盘有错误”或“非正常关机”引起!这是解决方法:(原创,引用请说明作者:力王 ...

  5. HDOJ -- 4632 区间DP

    Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65535 K (Java/ ...

  6. Boost库

    2014-08-31 Boost库是一个经过千锤百炼.可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一.Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成 ...

  7. windwos server 2008下iis7各种操作

    1.发布一个asp程序带access数据库的 默认server 08是安装了iis7的,但是它默认没支持asp这项,这时你可以直接去控制面板--程序和功能--打开或关闭windows功能(双击打开)- ...

  8. 传输层之TCP

    ---恢复内容开始--- 坞无尘水槛清,相思迢递隔重城. 秋阴不散霜飞晚,留得枯荷听雨声.    --李商隐 上一篇中我们了解了socket编程是基于TCP或者UDP,所以我们有必要对TCP,和UDP ...

  9. WORD文档的长串数字如何粘贴到excel

    有问题,才有提高 问题描述: 现 word 文档中有好多长长的数字(如下),我需要将它们弄进 Excel 中 直接[复制],[粘贴],结果显示如下: 然后再设置单元格格式中的数字,无论选哪一个都得不到 ...

  10. 3 weekend110的配置hadoop(格式化) + 一些问题解决 + 未免密码配置

    由于,之前,已经在/etc/profile里,配置了hadoop的全局变量,所以,现在可以在任何路径下执行hadoop命令. 来玩玩, 其实啊,在这里,出现了错误, 参考解决链接: http://it ...