一天一个shell命令 linux文本内容操作系列-awk命令详解

2019-09-23 09:19:20丽君

     -W re-interval        --re-interval
允许间隔表达式在正则表达式上
    -W source=program-text    --source=program-text
     -W traditional        --traditional
传统的Unix awk的正则表达式匹配
     -W usage        --usage
     -W use-lc-numeric    --use-lc-numeric
解析数字输入时,强制使用的语言环境中的小数点字符
 数据
 -W version        --version
提交错误报告请参考“gawk.info”中的“Bugs”页,它位于打印版本中的“Reporting
 Problems and Bugs”一节

注意:gawk是awk的GNU版本,即使help ,在ubuntu下也需要先安装gawk

这回我们就不解读了,为了增加大家的信息和乐趣,先来点基本的:

部分特殊变量:

NR: 表示记录数量,在执行过程中对应于行号
NF:表示字段数量,在执行过程中对应于当前行的字段数
$0: 这个变量包含执行过程中当前行的文本内容
$1: 第一个字段的文本内容
$2: 第二个字段的文本内容

例子:

例1.


echo -e "line1 f2 f3nline2 f4 f5nline3 f6 f7"|#这个是在窗口中写多行命令用的 
awk '{ 
print "Line no:"NR",No of fields:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3 
}' 

小注一下:$1是打印第一个,$NF打印最后一个字段,$(NF-1)打印倒数第二个

 例2.

seq 5 | awk 'BEGIN{ sum=0;print "Summation:"}{print $1"+";sum+=1}END{print "==";print sum}'

这个例子用到了基本格式。

BEGIN中 初始化了sum,打印Summation
中间模块打印了第一列,然后给sum+1

END中打印了sum

 例3. 关于-v 外部变量


$ VAR=10000
$echo | awk –v VARIABLE=$VAR'{print VARABLE}'

还有另一种灵活的方法可以将多个外部变量传递给awk,例如:


$var1="value1" var2="value2"
$echo | awk '{print v1,v2}' v1=$var1 v2=$var2

如果来自文件

awk '{print v1,v2}' v1=$var1 v2=$var2 filename

例4

$awk 'NR < 5' #行号小于5
$awk 'NR==1,NR==4' #行号在1到5之间的行
$awk '/linux/' #包含样式linux的行(可以用正则表达式指定样式)
$awk '!/linux/' #不包含样式linux的行

这次先写这些,争取在花2个篇幅能把awk做个比较全面的认识。

awk补充

之前我们学习了awk基本入门,我惊喜的发现有awk一篇详细文章,有写念头,不能全部转载,转化成自己的方式来写一些。

主讲内置变量和部分字符串函数