专栏首页秘籍酷Linux基础(好用到流泪的awk)

Linux基础(好用到流泪的awk)

有些人刚学Linux,被各种字符界面的命令和工具所折磨,觉得还是点鼠标方便。但说到底其实都只是没有领略字符工具的效率和魅力罢了。Linux中不乏命令中的神器,今天来介绍其中的一款,来自白银时代的上古神器awk。

简单地说,awk是一种用于处理文本的编程语言工具,他扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。比如:

vincent@ubuntu:~$ awk ‘NR==1 { print $0 } NF==5 { print $1 }’ file

以上命令的执行逻辑是:awk从file中读取数据,每次读取一行,读到一行数据之后判断每一个条件是否成立,如果成立则执行花括号里面的动作,比如NR==1成立则执行print $0,然后再判断NF==5是否成立来决定是否执行print $1。然后读取下一行,以此类推。用伪代码来表示:

vincent@ubuntu:~$ awk ‘条件1 {动作1} 条件2 {动作2} ……’ file

其含义就是:从file中每次读取一行,然后针对这一行判断条件1,成立则执行动作1,否则不执行,然后判断条件2,成立则执行动作2,否则不执行,以此类推。如果一个动作前面没有条件,则这个动作就可以“无条件”执行。

请注意,awk尤其擅长处理带“列格式”的文件,为了更好地理解awk的使用技巧,现假设有一个测试文档,该文档记录的是一个跆拳道培训班的孩子的名字、入学日期、学号、级别、年龄和分数:

现在要将不同年龄段的孩子的信息,分别归置到不同的文件中,并且要求文件名为年龄数。如果没有awk,编程实现这个功能是挺费周折的,但是awk却能一句话就搞定,请欣赏:

vincent@ubuntu:~$ awk '{print > $5}' grade.txt

意思是:每一行都将被重定向到以第5个域(年龄)命名的文件中去。就这样,一瞬间就将文件按年龄拆分成一个个规整好了的小文件了!怎样,有没有好用到流泪?

本文分享自微信公众号 - 秘籍酷(mijiku040),作者:林世霖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux基础(文件类型)

    Linux下一切(除网卡)皆文件的概念深入人心,那么世界万物在Linux系统中被分成多少种文件呢?他们有什么特点呢?

    用户2617681
  • C语言(一个真实的故事)

    曾经有一个简单又不失牛逼的小技巧,老师教的时候我没有珍惜,等到同事因为用了这个技巧升任总工才后悔莫及,如果上天再给我一次机会,我会对老师说:我要学!如果非要定个...

    用户2617681
  • C语言(不明觉厉的cv限定词)

    以上对话虽然是杜撰的,但也绝非空穴来风,的的确确有类似的面试场景,我们不要笑话别人,也不能允许以后被别人笑话。比如上述对话中提到的cv限定词,现在就得立刻马上就...

    用户2617681
  • 关于C++编译链接和模板函数

    一,关于编译链接 编译指的的把编译单元生成目标文件的过程 链接是把目标文件链接到一起的过程 编译单元:可以认为是一个.c或者.cpp文件。每个编译单元经过预...

    xcywt
  • 准备数据集用于flink学习

    在学习和开发flink的过程中,经常需要准备数据集用来验证我们的程序,阿里云天池公开数据集中有一份淘宝用户行为数据集,稍作处理后即可用于flink学习;

    程序员欣宸
  • socktIo的客户端与nodejs服务器端代码示例

    喜欢本文请扫下方二维码,关注微信公众号: 前端一会,查看更多我写的文章哦,多谢支持。

    前端_AWhile
  • 开源 | 伯克利AI分布式框架Ray,兼容TensorFlow、PyTorch与MXNet

    机器之心
  • pyspark-ml学习笔记:模型评估

    问题是这样的,如果我们想基于pyspark开发一个分布式机器训练平台,那么肯定需要对模型进行评估,而pyspark本身自带模型评估的api很少,想进行扩展的话有...

    MachineLP
  • NLP 新手必看!这是一份覆盖全面的基于 PyTorch 和 keras 的 NLP 学习教程

    简介:内容相当丰富,涵盖神经网络机器翻译、问答匹配、电影评价分类、新闻分类等多个领域。这是一个教你逐步实现和适应简单的实词 NLP 任务的教程。这些资源都提供了...

    昱良
  • 语义分割--End-to-End Instance Segmentation with Recurrent Attention

    End-to-End Instance Segmentation with Recurrent Attention CVPR2017 https://g...

    用户1148525

扫码关注云+社区

领取腾讯云代金券