前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux|Awk 特定模式 过滤文本

Linux|Awk 特定模式 过滤文本

作者头像
科学冷冻工厂
发布2024-03-21 15:48:03
800
发布2024-03-21 15:48:03
举报

以下部分[1]中,我们将研究基于用户可以定义的特定模式过滤文本或字符串。

有时,在过滤文本时,您希望根据给定条件或使用可匹配的特定模式来指示输入文件中的某些行或字符串行。使用 Awk 执行此操作非常简单,这是 Awk 的强大功能之一,您会发现它很有帮助。

示例

让我们看一下下面的示例,假设您有一个想要购买的食品的购物清单,名为 food_prices.list。

它有以下食品及其价格清单。

代码语言:javascript
复制
cat food_prices.list 
No Item_Name  Quantity Price
1 Mangoes      10  $2.45
2 Apples      20  $1.50
3 Bananas      5  $0.90
4 Pineapples     10  $3.46
5 Oranges      10  $0.78
6 Tomatoes     5  $0.55
7 Onions      5            $0.45

然后,您想在价格大于 2 美元的食品上标明 (*) 符号,可以通过运行以下命令来完成:

代码语言:javascript
复制
awk '/ *$[2-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list

从上面的输出中,您可以看到包含食品、芒果和菠萝的行末尾有一个 (*) 符号。如果你检查一下他们的价格,它们都在 2 美元以上。

在此示例中,我们使用了两种模式:

  • 第一个: / *$[2-9].[0-9][0-9] */ 获取食品价格大于 2 美元的行
  • 第二个: /$[0-1].[0-9][0-9] */ 查找食品价格低于 2 美元的行。

文件中有四个字段,当一遇到食品价格大于 2 美元的行时,它会打印所有四个字段并在行末尾打印一个 ( * ) 符号作为标志。

第二种模式只是打印输入文件 food_prices.list 中食品价格低于 2 美元的其他行。

通过这种方式,您可以使用特定于模式的操作来过滤掉价格高于 2 美元的食品,尽管输出存在问题,但带有 (*) 符号的行的格式不会像其余行那样进行格式化。输出不够清晰。

可以通过两种方式解决它:

  1. 使用 printf 命令,这是一种漫长而无聊的方法,使用以下命令:
代码语言:javascript
复制
$ awk '/ *$[2-9]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4 "*" ; } / *$[0-1]\.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s\n", $1, $2, $3, $4; }' food_prices.list 
  1. 使用 $0 字段。 awk 使用变量 0 来存储整个输入行。这对于解决上述问题很方便,而且简单快捷,如下所示:
代码语言:javascript
复制
$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $0 "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list 

总结

这些是使用特定模式的操作来过滤文本的简单方法,可以帮助使用 Awk 命令标记文件中的文本行或字符串。

未完待续,欢迎关注!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
  • 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档