awk命令和编程

awk命令格式

AWK的两个特殊字段:BEGIN和END
   BEGIN:在未读取输入文件行之前执行。
   END:在读取输入文件行完毕后执行。
  1. awk [-F 域分割符] ‘awk程序段’ 输入文件
    注意:要用单引号将awk程序段括起来。

  2. awk -f awk脚本文件 输入文件

  3. ./ awk脚本文件 输入文件
    注意:第三种方式中,awk脚本文件仍以sha-bang(#!)开头,但是sha-bang的符号后面加上awk的路径。

第一种调用方式:

awk '/^$/{print "this is a blank line!"}' city

第二种调用方式:

awk -f  scr.awk  city

第三种调用方式:

 ./ser.awk city

awk模式匹配

模式可以是以下任意一种:

•正则表达式:使用通配符的扩展集

•关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试

•模式匹配表达式:用运算符~(匹配)和 !~(不匹配)

•BEGIN 语句块, pattern语句块, END语句块

awk '{print $2,$1,$4,$3}' sure         
 //按照2143的顺序打印sure的域

awk '{print $0}' sure  
 //打印sure的全部域

awk 'BEGIN{one=1;two=2}{print $(one+two)}' sure   
 //打印sure的第三个域

awk 'BEGIN{F}{FS=","}{print $1,$3}' sure   
 //以逗号为分隔符,打印13号域

awk 'BEGIN{F}{FS=","}{print $0}' sure        
//以逗号为分隔符,打印所有域

awk关系和布尔运算符

•算术运算:(+,-,*,/,%(模),^,++x,x++)

•赋值运算:(=)

•布尔运算符: (||, &&,!)

•关系运算符:(<, <=, >,>=,!=, ==)

•正则运算符:(~,~!)(匹配正则表达式,与不匹配正则表达式)

awk 'BEGIN {FS=":"}  $1~/root/' /etc/passwd  
 //打印/etc/passwd文件中第一个域匹配root关键字的记录

awk 'BEGIN {FS=":"}  $0~/root/'   /etc/passwd   
//打印/etc/passwd文件中全部域匹配root关键字的记录

awk 'BEGIN {FS=":"}  $0!~/nologic/'   /etc/passwd   
//打印/etc/passwd文件中全部域不匹配nologic关键字的记录

awk 'BEGIN {FS=":"}  {if($3<$4)  print  $0' /etc/passwd  
//打印第三域小于第四域的记录

awk 'BEGIN {FS=":"} {if($3==10||$4==10) print $0'/etc/passwd    
//打印第三域等于10或第四域等于10的记录(精确匹配)

awk 'BEGIN {FS=":"} {if($3~10||$4~10) print $0' /etc/passwd    
//打印第三域等于10或第四域等于10的记录(模糊匹配)

系统变量

•$n : 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。域 间由FS分割。

•$0 : 记录的所有域。

•ARGC : 命令行参数的数量。

•ARGIND : 命令行中当前文件的位置(从0开始算)。

•ARGV : 包含命令行参数的数组。

•CONVFMT : 数字转换格式(默认值为%.6g)。

•ENVIRON : 环境变量关联数组。

•ERRNO : 最后一个系统错误的描述。

•FIELDWIDTHS : 字段宽度列表(用空格键分隔)。

•FILENAME : 当前输入文件的名。

•NR : 表示记录数,在执行过程中对应于当前的行号(当前记录数)。

•FNR : 浏览文件的记录数。

•FS : 字段分隔符(默认是空格键)。

•IGNORECASE :布尔变量, 如果为真,则进行忽略大小写的匹配。

•NF : 当前记录中的域数量。

•OFMT : 数字的输出格式(默认值是%.6g)。

•OFS : 输出域分隔符(默认值是一个空格)。

•ORS : 输出记录分隔符(默认值是一个换行符)。

•RS : 记录分隔符(默认是一个换行符)。

•RSTART : 由match函数所匹配的字符串的第一个位置。

•RLENGTH : 由match函数所匹配的字符串的长度。

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

awk 'BEGIN{FS=","} {print NF,NR,$0} END {print FILENAME}'  city

格式化输出
printf (格式控制符,参数)
printf语句包含两部分:第一部分是格式控制符都以%符号开始,用以描述格式规范。第二部分是参数列表,与格式控制符相对应,是输出的对象。

printf修饰符:

• - : 左对齐。

• width : 域的步长。

• .prec : 小数点右边的位数。

printf格式符:

•%c:ASCII字符
•%d:整数型
•%e:浮点型
•%f:浮点型
•%o:八进制数
•%x:十六进制数
•%s:字符串

awk 'BEGIN{FS=","} {printf ("%s\t%d\n",$2,$8)}'  city
解释:$2号域与%s对应,为字符串;$8号域与%d对应,为整数值,两个域之间用
Tab键隔开(\t),每输出两个域换行(\n).
awk 'BEGIN{printf("%c\n",65)}'   //转换为ASCII字符
awk 'BEGIN{printf("%f\n",2008)}'     //2008.000000
awk ‘BEGIN{FS=”,”} {printf (“%-15s\t%s\n”,$1,$3)}’ city
注:-15表示该字符串长度控制为15位,并且左对齐,若字符串不足15位,则用空
格补全。
awk ‘BEGIN{printf(“%10.3f\n”,2008)}’ // 2008.000
awk ‘BEGIN{printf(“%.3f\n”,2008.1314)}’ //2008.131
awk 'BEGIN{FS=","} {printf ("%-15s\t%s\n",$1,$3)}'  city
注:-15表示该字符串长度控制为15位,并且左对齐,若字符串不足15位,
则用空格补全。
awk 'BEGIN{printf("%10.3f\n",2008)}'     //  2008.000
awk 'BEGIN{printf("%.3f\n",2008.1314)}'    //2008.131

内置字符串函数
•gsub(r,s):在输入文件中用s替换r.
•gsub(r,s,t):在t中用s替换r.
•index(s,t):返回s字符串中第一个t的位置。
•length(s):返回s字符串的长度。
•match(s,t):返回s是否包含匹配t的字符串。
•split(r,s,t):在t上将r分成序列s.
•sub(r,s,t):将t中第一次出现的r替换为s.
•substr(r,s):返回字符串r中从s开始的后缀部分。
•substr(r,s,t):返回字符串r中从s开始长度为t的后缀部分.

awk 'BEGIN{FS=":";OFS=":"} gsub(/root/,"gridsphere",$1) {print$0}' /etc/passwd   
 //将/etc/passed文件的第1域上的root字符串替换为gridsphere

 awk 'BEGIN{FS=":";OFS=":"} gsub(/root/,"gridsphere",$0)  {print$0}' /etc/passwd  
   //将/etc/passed文件的全部域上的root字符串替换为gridsphere

  awk 'BEGIN {print index("gridsphere",er)}'   //8  
  awk 'BEGIN {print length("gridphere")}'     //9 默认匹配区分大小
   awk 'BEGIN {IGNORECASE=1;print match("gridphere",/D/)}'  
     //4   IGNORECASE=1表示不分大小写匹配
 awk 'BEGIN{str="multiprocessor programming";sub(/pro/,"PRO",str);printf("%s\n",str)}'     
 //multiPROcessor programming
  awk 'BEGIN{str="multiprocessor programming";print substr(str,6)}'    
  //processor  programming   返回str从第6个字符开始的后缀部分

  awk 'BEGIN{str="multiprocessor programming";print substr(str,6,9)}'  
   //processor    返回str从第6个字符开始长度为9的后缀部分

条件语句和循环语句
条件语句 if语句:
if (条件表达式) 动作1 else 动作2
循环语句有三种:while,do while和for
for循环:
for(变量 in 数组)
{语句}
for(变量;条件;表达式)
{语句}

while循环:
while(表达式)
{语句}

do…while循环:
do
{语句} while(条件)
数组
基本格式:array[index]=value

分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是一种频率随时间线性变化的信号,因其具有宽频带良好的时频分辨率,被广泛应用于雷达通信系统。FRFT能够更精准地捕捉LFM信号的时间频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是一种强大的数值计算科学计算工具,拥有丰富的函数库用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,一个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号与经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值