linux awk
来源:互联网 发布:js replace 单引号 编辑:程序博客网 时间:2024/06/08 16:03
原文链接:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
sed和awk的结合使用
sed主要是对行进行操作,增加删除替换行或者替换行中的某些字符。
awk主要取列,取得第几列,StartEnd,还有一些统计信息等。
使用方法
awk '{pattern + action}' {filenames}
入门实例
1.假设last -n 5的输出如下
[root@www ~]# last -n 5 <==仅取出前五行root pts/1 192.168.1.100 Tue Feb 10 11:21 still logged inroot pts/1 192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41)root pts/1 192.168.1.100 Mon Feb 9 11:41 - 18:30 (06:48)dmtsai pts/1 192.168.1.100 Mon Feb 9 11:41 - 11:41 (00:00)root tty1 Fri Sep 5 14:09 - 14:10 (00:01)
2.如果只是显示最近登录的5个帐号
#last -n 5 | awk '{print $1}'rootrootrootdmtsairoot
awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。
3.如果只是显示/etc/passwd的账户
#cat /etc/passwd |awk -F ':' '{print $1}' rootdaemonbinsys
这种是awk+action的示例,每行都会执行action{print $1}。
-F指定域分隔符为':'。
4.如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
#cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'root /bin/bashdaemon /bin/shbin /bin/shsys /bin/sh
5.如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'name,shellroot,/bin/bashdaemon,/bin/shbin,/bin/shsys,/bin/sh....blue,/bin/nosh
6.搜索/etc/passwd有root关键字的所有行
#awk -F: '/root/' /etc/passwdroot:x:0:0:root:/root:/bin/bash
这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。
搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd
7.搜索/etc/passwd有root关键字的所有行,并显示对应的shell
# awk -F: '/root/{print $7}' /etc/passwd /bin/bash
这里指定了pattern+action{print $7}
awk内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
ARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命令行 -F选项NF 浏览记录的域的个数 Number of fieldNR 已读的记录数 Number of recordOFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符
统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
#awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwdfilename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bashfilename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/shfilename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/shfilename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh
- linux awk
- Linux awk
- Linux awk
- linux awk
- linux awk
- linux awk
- Linux----AWK
- Linux awk
- Linux awk
- Linux awk
- awk linux
- linux awk
- linux awk
- linux awk
- awk linux
- linux awk
- linux awk
- linux awk
- book
- excle导出
- Java操作Excel文件导入
- 【数据结构】邻接矩阵表示法的图的深度广度优先遍历递归和非递归遍历
- drools用户指南----Cross Products
- linux awk
- 程序员之素养《高质量C++/C编程指南》(一)
- Java Hashmap多线程同时操作导致的问题
- golang 语言学习
- 华为上机题之坐标移动
- python脚本设置运行参数
- 各种接口测试、jmeter、LRunner、selenium等视频分享
- IOS开发第二天-协议与委托
- hadoop实例(java模板):数字逆序输出 (自定义mapper,reducer,自定义key2类型,重写compareTo函数,HDFS操作)