【一天一个shell命令】文本内容操作系列-awk补充一

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

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

内置变量(有翻译特殊变量和环境变量,按照官方翻译为内置变量) 

变量

说明

$n 当前记录的第n个字段,字段间由FS分隔。
$0 完整的输入记录。
ARGC 命令行参数的数目。
ARGIND 命令行中当前文件的位置(从0开始算)。
ARGV 包含命令行参数的数组。
BINMODE 在非POSIX系统上,这个变量指定的所有I / O使用二进制模式
CONVFMT 数字转换格式(默认值为%.6g)
ENVIRON 环境变量关联数组。
ERRNO 最后一个系统错误的描述。
FIELDWIDTHS 字段宽度列表(用空格键分隔)。
FILENAME 当前文件名。
FNR 同NR,但相对于当前文件
FPAT

这是一个正则表达式(字符串),告诉gawk基于匹配正则表达式的文本来创建字段

FS 字段分隔符(默认是任何空格)。
IGNORECASE 如果为真,则进行忽略大小写的匹配。
LINT

当这个变量为真(非零或非空),gawk的行为犹如"--lint"命令行选项

NF 当前记录中的字段数。
NR 当前记录数。
OFMT 数字的输出格式(默认值是%.6g)。
OFS 输出字段分隔符(默认值是一个空格)。
ORS 输出记录分隔符(默认值是一个换行符)。
PROCINFO

这个数组的元素提供访问运行awk程序的信息

RLENGTH 由match函数所匹配的字符串的长度。
RS 记录分隔符(默认是一个换行符)。
RT 每次一条记录被读取的设置
RSTART 由match函数所匹配的字符串的第一个位置。

 

SUBSEP

数组下标分隔符(默认值是\034)。

TEXTDOMAIN 此变量用于程序的国际化

蓝色为新增加的内置变量。 

 

简单举例:

1.

  
  
  
  
  1. sed 1q /etc/passwd | awk '{ FS = ":"; print $1 }' 

打印密码第一行,用冒号分隔符

2.

  
  
  
  
  1. awk 'END{print FILENAME}' awk.txt 

打印文本FILENAME

3.

  
  
  
  
  1. seq 100 | awk 'NR==4,NR==6' 

打印4到6行 

 再介绍几个awk内置的字符串函数,也讲一部分。

length(string):
 返回字符串的长度

index(string,serch_string):
返回search_string在字符串中出现的位置

split(string,array,delimiter):
用定界符生成一个字符串列表,并将该列表存入数组

substr(string,array,delimiter):
 在字符串中用字符起止便宜量生成子串,并返回该子串

sub(regex,replacement_str,string):
将正则表达式匹配到的第一处内容替换成replacement_str

gsub(regex,replacement_str,string):
和sub()类似。不过该函数会替换正则表达式匹配到的所有内容

match(regex,string):
检查正则表达式是否能够匹配字符串。如果能够匹配,返回非0值;否则,返回0.match()有两个相关的特殊变量,分别是RSTART喝RLENGTH。变量RSTART包含正则表达式所匹配内容的其实位置,而变量RLENGTH包含正则表达式所匹配内容的长度。
 

举例:

1.

  
  
  
  
  1. $ awk '{ sub(/test/, "mytest"); print }' testfile 

在整个记录中匹配,替换只发生在第一次匹配发生的时候

2.

  
  
  
  
  1. $ awk '{ sub(/test/, "mytest"); $1}; print }' testfile 

在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候

3.

  
  
  
  
  1. $ awk '{ print index("test", "mytest") }' testfile 

实例返回test在mytest的位置,结果应该是3

4.

  
  
  
  
  1. $ awk '{ print length( "test" ) }' 

实例返回test字符串的长度。

你可能感兴趣的:(shell,awk,shell命令,一天一个shell)