awk文本筛选

awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。它依次处理文件的每一行,并读取里面的每一个字段

[engine@client2v ~/yy1]$ cat demo.txt 
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
enjoy+yourself

awk处理文本

(1)awk action filename;(2)stdin | awk action

[engine@client2v ~/yy1]$ awk '{print $0}' demo.txt 
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
enjoy+yourself
[engine@client2v ~/yy1]$ cat demo.txt | awk '{print $0}'
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
enjoy+yourself
[engine@client2v ~/yy1]$ echo 'create some text from screen' | awk '{print $0}'
create some text from screen

对文本的每行操作

$0表示当前行全部内容
$1表示根据空格/制表符切分,第一个字段
$i表示根据空格/制表符切分,第i个字段
$(NF-1)表示根据空格/制表符切分,最后倒数第二个字段
$NF表示根据空格/制表符切分,最后一个字段

[engine@client2v ~/yy1]$ echo 'create some text from screen' | awk '{print $1,$NF}'
create screen
#逗号表示按空格连接变量$1和$NF

指定每行切分的分割符

awk -F ‘分隔符’ action filename

[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{print $(NF-1)}'                      
for
exercising
enjoy

awk的内置变量及内置函数

FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。
++++++++++++++++++++++++++
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。

[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{print NR,$(NF-1)}'            
1 for
2 exercising
3 enjoy
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{print NR,length($(NF-1))}'
1 3
2 10
3 5

awk条件判断,筛选行

awk condition action filename

[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '/awk/ {print $0}' 
this+is+a+demo+for+awk
have+a+good+time+exercising+awk
#/awk/是正则表达式,表示筛选出包含awk的行
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' 'NR>1 {print $0}'      
have+a+good+time+exercising+awk
enjoy+yourself
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '$1=="have" {print $0}'    
have+a+good+time+exercising+awk
[engine@client2v ~/yy1]$ cat demo.txt | awk -F '+' '{if ($1 == "have") print $0; else print "++++++++"}'
++++++++
have+a+good+time+exercising+awk
++++++++
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值