linux中awk的使用(绝对精华版)

在linux中awk绝对是核心工具,特别是在查找搜索这一领域,和掌握sed命令一样重要

下面为awk的一些基本知识,基于这些知识,可以让你随意操控一个文件:

在awk中:()括号为条件块,{}为执行的命令块

print命令
打印文件内容
awk ‘{print}‘ datafile

-f参数
执行awk脚本,如脚本为hello.awk
awk -f hello.awk datafile

$number
表示记录的字段,其中$0表示整个串

FS
表示字段分隔符,如下以逗号作为分隔符
awk ‘BEGIN{FS=","}{print}‘ datafile
当写脚本文件时,一般用FS

-F参数
同FS作用一样,设置分隔符,如
awk -F "," ‘{print $1}‘ datafile

NF
表示当前记录行中的字段数量

NR
表示当前记录的编号,即行号

FNR
当前浏览文件的记录数

FS="\t+"
表示以一个或多个制表符作为分隔符

OFS
字符分隔符,俩个字段间插入分隔符

RS
记录分隔符,即一行的分隔符

ORS
输出记录分隔符,俩个记录间(行)插入

OFMT 数的输出格式

CONVFMT 数值的内部转换格式

布尔表达式
awk -F "," ‘$1=="Hello" {print $1}‘ datafile
只有第一个参数值为Hello时,才打印第二个

length(string1)
返回string1长度

index(string1,string2)
返回string2在string1中的位置,没有返回0

tolower(string1)/toupper(string1)
返回大小写

substr(string1,5,3)
从string1的第5位置开始截取长度为3的字段

match(string1,/you/),RSTART,RLENGTH
match匹配的是一个正则表达式
RSTART返回第一个匹配的位置
RLENGTH指定他占据的字符跨度,没有为-1

gsub/sub(/My/,"You",string1)
gsub全局替换,sub只替换第一个
如上为在string1中查找My并替换为You

split(string1,strarray,",")
print strarray[1],strarray[numelements]
把string1以逗号分割,并传入到strarray组中
从1开始编号

删除重复行(必须先排序)
sort  datafile|awk ‘{if($0!=line)print;line=$0}‘

FILENAME
awk中特殊存在,用于表示文件
awk ‘END{print FILENAME}‘ datafile
打印file名字
若有多个输入文件则可以用于判断,如:
awk ‘if(FILENAME=="file1"){arr[$3]=$1}else{($1 in arr){print arr[$1]"|"$2}} file1 file2
注意:awk先处理前面文件再处理后面文件

ARGIND
当前被处理参数标记

ARGC
命令行参数个数

ARGV
命令行参数排列

ENVIRON
支持队列中环境变量的使用

next
下一个命令不执行
awk ‘(NR%2=1){next}{print}‘ f1
awk ‘NR==FNR{a[$0]=$0;next}a[$0]{print a[$0],$0}

nextfile
中断当前文件处理,进入下个文件处理:
awk ‘{print FILENAME;nextfile} f1 f2
打印俩个文件名,多用于查找文件

exit
停止awk,并执行END语句块后退出

定义函数:
awk ‘{print "sum=",sqrtsum($1,$2)}function sqrtsum(x,y){return x*x+y*y}‘ file
awk ‘{print "sum=",$1*$1+$2*$2}

-v
加载环境或shell中的参数
awk-F \| -v ORAHOME=${ORA_HOME} ‘{print $1"|"ORAHOME>"datafile1"} datafile
或者如下:
awk-F \|  ‘{print $1"|"ORAHOME>"datafile1"} ORAHOME=${ORA_HOME} datafile

getline
获取文件的行内容,一般放在BEGIN中
一个getline获取一行,也可以保存到变量
awk ‘BEGIN{getline var1}END{print var1}‘ file

打印5行之后的行:
awk ‘NR>5‘ file
打印2到6行:
awk ‘NR==2,NR==6‘ file
打印前5行:
awk ‘!(NR>5)‘ file
awk ‘NR<6‘ file
打印5倍数的行:
awk ‘(NR%10==0){print}‘ file
awk ‘!(NR%10){print}‘ file

awk中相关操作符使用

~操作符
俩边匹配符,可模糊比较,如:
awk ‘BEGIN{FS="|"}($2~/..My./){print}‘ file

比较运算符
==俩边相等
>
>=
<
<=
!=俩边不等
~ 匹配正则表达式
!~ 不匹配正则表达式
‖逻辑或
&& 逻辑与

算术运算符
+      加法
-       减法
*      乘法
/      除法
^     指数算法
%    模算法
--     自-1(前后自减)
++   自+1(前后自加)
+=    自加算法
-=      自减算法
*=      自乘算法
/=      自除算法
^=     自指数算法
%=    自模算法

统计文本中空行数量
awk ‘BEGIN{x=0}/^$/{x+=1}END{print x}‘ datafile
/^$/表示空行

正则表达式:
\      转义符
^      行首符
$      行尾符
.        匹配一个字符
[ ]      匹配其中一个字符
|        或操作
( )     判断语句
*       匹配0个或多个前面的字符
+      匹配前面一个或多个字符
?      匹配模式出现频率

if语句
if($1=="foo"){
    print "foo"
}else if($1=="bar"){
    print "bar"
}else{
    print "other"
}

do..while语句
{
count=6
do{
     print count
     count--
    }while(count!=1)
}

while语句
{
while(x<NF){
     print $x
     x++
   }
}

for语句
for(x=1;x<=5;x++){
    print x
}

原文地址:https://www.cnblogs.com/watertaro/p/9221054.html

时间: 2024-10-14 08:43:06

linux中awk的使用(绝对精华版)的相关文章

Linux中awk后面的RS, ORS, FS, OFS 用法

Linux中awk后面的RS, ORS, FS, OFS 含义 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的,但如何定义"行"呢?这就是RS的作用.  默认情况下,RS的值是\n.下面通过实例来理解下RS. echo '1a2a3a4a5' | awk '{print $1}' 1a2a3a4a5 echo '1a2a3a4a5' | awk 'BEGIN{RS="a"}{print $1}' 1 2 3 4 5我们可以看到,在更改了RS的

linux中awk学习小结

awk与sed本身都是一个完整的编程语言,可以用来方便的处理文本.awk正常的结构: cat tmp.txt | awk 'BEGIN{}{}END{}'   --带有表头,带有中间的处理过程,带有结尾--常用用法:cat tmp.txt|awk '{print $1}'  --tmp.txt中字段已空格分隔,$0显示整行,$1表示第一个域,$NF最后一个,$NF-1倒数第二个域,默认的分隔符是空格--  1.域分隔符是:cat /etc/passwd|awk -F':' '{print $1,

linux中awk详解

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value '  '          引用代码块 BEGIN   初始化代码块,在对每一行进行处理之前,初始

linux 中awk 学习随笔

awk awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 常用案例:  awk内置对象: ARGC               命令行参数个数ARGV               命令行参数排列ENVIRON            支持队列中系统环境变量的使用FILENAME           awk浏览的文件名FNR       

Linux中awk命令的简单用法

一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.

mac 系统的Numbers格式化linux中awk后的结果

这里Numbers的对应规则如此: 如果源文件是 txt 文件 (xxx.txt) , 那么他的分隔符,就一定要是一个    tab 如果源文件是csv 文件 (yyy.csv) , 那么他的分隔符,就一定要是一个 逗号(comma) 可以使用 Pages或者 Textmate 之类的软件 查找并替换 所有分隔符 然后直接在 Numbers 中粘贴,即可自动分列 参考:http://bbs.feng.com/read-htm-tid-487026.html

Linux中使用ps、awk、sh一起批量杀死所有的dotnet进程。

一.操作 Linux中使用ps.awk.sh一起批量杀死所有的dotnet进程. 二.命令 ps -ef|grep dotnet|awk 'NR==2{print "kill "$2}'|sh 说明: NR表示行号是第二行.$2表示是ps进程列表中的第2列. 三.如图

awk -F选项同时指定多个符号做为分割符时遇到空格坑,题目:请执行命令取出 linux 中 eth0 的 IP 地址

第三关课前考试题:3.请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答) 因为以前有个题讲过awk -F选项可以指定输入分割符,也可以同时使用多个符号作为分割符对文件进行切割,所以我决定先使用awk -F 以前awk -F同时指定多个分割符的例子: [[email protected] ~]# cat oldboy.txt I am oldboy,myqq is 31333741 [[email protected] ~]# aw

linux中的文件处理grep、sed、awk

1.grep grep [options] pattern [file-]options:表示选项pattern:要匹配的模式.file:表示一系列的文件名选项:-c 只输出匹配行的计数-i 不区分大小写(用于单字符)-n 显示匹配的行号-v 不显示不包含匹配文本的所以有行-s 不显示错误信息-E 使用扩展正则表达式 grep -c 关键字 文件名 ##显示出现的关键字的行数grep -n 关键字 文件名 ##显示该关键字的行grep -n2 关键字 文件名 ##显示该关键字行的上下各两行gre