Linux学习笔记-----1 awk命令小结

awk小结:

1 awk的原理

概要:awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

  1. 读输入文件之前执行的代码段(由BEGIN关键字标识)。
  2. 主循环执行输入文件的代码段。
  3. 读输入文件之后的代码段(由END关键字标识)

demo1基础案例:

demo1.txt

1) 张三 语文 80

2) 李四 数学 90

3) 王五 英语 87

执行命令

1 awk 'BEGIN{ print "序号\t名字\t课程\t分数" } {print} END{ print "成绩报告打印完成" }' demo1.txt 
2 awk 'BEGIN{ print "成绩打印如下:\n序号\t名字\t课程\t分数" } {print} END{ print "成绩报告打印完成" }' demo1.txt 
3 awk 'BEGIN{ print "成绩打印如下:\n名字\t课程" } {print $2,'\t',$4} END{ print "成绩报告打印完成" }' demo1.txt 

配合管道符使用: 
1 cat demo1.txt | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'

结果

序号 名字 课程 分数 
1) 张三 语文 80 
2) 李四 数学 90 
3) 王五 英语 87 
成绩报告打印完成

带参数

1 管道符配合使用
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' 
v1 v2 v3

2 echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
v1=v2=v3

2 awk的内置变量

$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 
$0 这个变量包含执行过程中当前行的文本内容。

[A] FILENAME 当前输入文件的名。

[A] F 字段分隔符(默认是任何空格)。

[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。

案例

demo2.txt
张三 英语 60
李四 英语 70
王五 英语 80

命令:配合awk的变量使用

0 cat demo2.txt | awk -F ' ' '{print $2}'
1 cat demo2.txt | awk '{print "Line No:"NR", 列数:"NF, $0}'
2 cat demo2.txt | awk '{print "Line No:"NR", 列数:"NF, "整行内容"$0, "名字="$1, "科目="$2, "分数="$3}'
增加 EDM模块
3 cat demo2.txt | awk '{print "Line No:"NR", 列数:"NF, "整行内容"$0, "名字="$1, "科目="$2, "分数="$3} END{print "END命令只输出一次" }'

外部变量使用

使用-v命令指定外部变量
1 echo "" | awk -v v11=$var1 '{ print v11 }'
把变量放在后面
2 echo "" | awk '{ print v1,v2 }' v1=$var1 v2=$var2

3 awk还提供了一系列内置的运算函数

算术运算符

运算符

描述

+ -

加,减

* / &

乘,除与求余

+ - !

一元加,减和逻辑非

^ ***

求幂

++ --

增加或减少,作为前缀或后缀

赋值运算

运算符

描述

= += -= *= /= %= ^= **=

赋值语句

逻辑运算

运算符

描述

||

逻辑或

&&

逻辑与

正则运算符

运算符

描述

~ ~!

匹配正则表达式和不匹配正则表达式

demo

1 awk 'BEGIN{a=0;print a++,++a;}'

2 awk 'BEGIN{a=6;b=2;print (a>5 && b<=2),(a>6);}'

3 awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok是100开头的字符串";}}'

4 其他高级用法:

1 next用法

案例1
cat demo4.txt 
a
b
c
d
e
awk 'NR%2==1{next}{print NR,$0;}' demo4.txt 

案例2:正则+next的用法:把含有张的记录去掉
cat demo5.txt
张三 80
李四 90
王五 100
张四 110
张五 120
awk '/^张/{next;}{print}' demo5.txt

2 配合getline函数使用:通过管道符输入获取一行并输出

1 awk 'BEGIN{ "date" | getline out; print out }' test

2 awk 'BEGIN{ "cat demo5.txt" | getline out1; print out1 }' test

3 awk 'BEGIN{print "Enter your name:";getline name;print name;}'

3 文本输出

echo "" | awk '{printf("hello word!n") > "res3.txt"}' 

4 流程控制

① if判断
1 语法:
if(表达式)
  {语句1}
else if(表达式)
  {语句2}
else
  {语句3}

2 demo:   
 
awk 'BEGIN{
test=100;
if(test>90){
  print "very good";
  }
  else if(test>60){
    print "good";
  }
  else{
    print "no pass";
  }
}'
② 循环
语法
while(表达式)
  {语句}
  
2 demo
awk 'BEGIN{
test=100;
total=0;
while(i<=test){
  total+=i;
  i++;
}
print total;
}'
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
B站上的韩顺平老师的《Linux学习笔记》系列课程非常值得推荐。通过这个课程,我学到了很多关于Linux操作系统的知识和技能。 首先,韩老师在课程中详细介绍了Linux的基本概念和特点。我清楚地了解到Linux是一个开源的操作系统,具有稳定性、安全性和可定制性强的特点。这让我对Linux有了更深入的理解,也更有信心去学习和使用它。 其次,韩老师从基础开始,逐步讲解了Linux的安装和配置。他用简单明了的语言和实际操作的示范,帮助我了解了如何在虚拟机上安装Linux系统,并设置网络、用户账户、文件系统等。这为我后续的学习和实践打下了坚实的基础。 此外,韩老师还讲解了Linux的常用命令和工具。他详细介绍了常用的文件和目录操作命令,比如cd、ls、mkdir、cp等。同时,他还讲解了grep、sed、awk等强大的文本处理工具的使用方法。这些内容帮助我更加高效地进行文件管理和数据处理。 最后,韩老师还介绍了Linux的网络管理和安全防护。他讲解了如何配置网络连接、使用ssh远程登录以及设置防火墙等内容。这些知识对我了解网络和保护系统安全非常有帮助。 总的来说,韩顺平老师的《Linux学习笔记》课程非常实用,对于初学者来说是入门学习Linux的好选择。他通过深入浅出的讲解和丰富的实操示范,让我可以轻松地学习Linux的基本知识和操作技巧。我相信通过学习这个课程,我会在Linux领域有更进一步的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值