1854_bash中利用管道进行批量参数传递以及由此实现简单的代码行数统计

Grey

全部学习内容汇总: GreyZhang/bash_basic: my learning note about bash shell. (github.com)

1854_bash中的参数传递以及利用bash进行简单的代码行数统计

有时候需要处理多个文件,把每一个文件作为参数传递给某一个程序。这时候可以用到 xargs,而基础的linux教程中提供的wc程序,其实可以用来实现简单的代码行数的统计。

主题由来

这么多年来,自己造轮子的事情没少干。比如说,实现对一个工程C代码的代码行数统计。不过,好的是我之前造好的轮子一直用了很久,而且提供了一些细节性的处理。比如说,过滤掉注释只看有效代码等功能。不过,简单的看文件的自然行数,这样的处理功能是有现成的工具可以用的。如果对于统计来说统计信息就是这样的效果,那么可能利用已有的工具来处理在很多地方都会很通用。而且,这种工具不回限定编程语言。

解决这样的问题,其实关键点在于 xargs 的使用。而这里有一份值得参考的资料: How to Use the xargs Command on Linux

这一份资料我找到的时间比较晚,其实如果早一点的话,或许find的补课也会一起免除了。

实际探索体验以及效果

  • xargs的作用就是获取一个命令的输出,当作参数传递给另一个命令。

  • 关于unix类型的操作系统的文件特性,这里做了一个简单的介绍。这些信息,之前在看MIT的6.828的课程的时候没少看。

  • 为什么会有这样的一个命令出现呢?主要是因为并不是所有的命令都可以把其他命令的标准输出作为输入。
  • 这里给出来的应用例子,其实刚好也算是给上面的说明给出了几个命令的例子。
  • 除了从管道获取输入之外, xargs 还可以从文件获取信息。

  • wc是可以接收文件的,之前我看到的例子对我有一些误导,当时误以为是不可以的。

  • xargs可以支持交互式的确认操作。
  • 默认下,回车代表这not。

  • 这里又是一个组合应用的例子,其实也是很好的find使用的例子。

如何进行C语言代码行数的统计

在了解这样的功能之前,我其实从网络上找到了别人的使用示范进行修改后基本上实现了我的一个需求。具体如下:

find -iname '*\.c' -o -iname '*\.h' | xargs cat | wc -l

如下是代码的执行效果:

  • 从上面的结果中,我们能够直接看到一个汇总的行数。而-l其实就是获取并计算了总行数。

其实,wc能够统计到更多的信息。结合这里的教程信息,上面的统计可以写成这样子:

find -iname '*\.c' -o -iname '*\.h' | xargs wc

如下是执行的效果:

  • 这里不仅统计出来每一个文件的信息,而且还计算了汇总的信息。汇总后的信息自然还是跟之前统计的结果一致。

小结

开卷有益,多去看看别人的成果会很受益。相比我们自己造出来的轮子,类似bash等命令带给我们的可靠与稳定等体验要好得多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295480.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XSKY星辰天合星海架构荣获 IT168 “2023 年度技术卓越奖”

近日,"2023 年度技术卓越奖"获奖名单公布,XSKY 星辰天合的星海架构(XSEA,极速全共享架构)获得行业 CIO/CTO 大咖、技术专家及 IT 媒体三方认可,成功入选! “技术卓越奖”评选由国内著…

KMP入门级别算法详解--终于解决了(next数组详解)

对于正常的字符串模式匹配,主串长度为m,子串为n,时间复杂度会到达O(m*n),而如果用KMP算法,复杂度将会减少线型时间O(mn)。 设主串为ptr"ababaaababaa";&#…

双非本科求职_面试经验

前言 继上次发实习面经已经过去一个多快两个月,这期间又面试了不少,但由于赶上秋招因此一直没写后续,今天做个回忆总结。由于菜鸟脑容量本来就不咋地,所以当初没写导致现在忘了好多,因此就写那些印象比较深的吧。交代…

【C++进阶02】多态

一、多态的概念及定义 1.1 多态的概念 多态简单来说就是多种形态 同一个行为,不同对象去完成时 会产生出不同的状态 多态分为静态多态和动态多态 静态多态指的是编译时 在程序编译期间确定了程序的行为 比如:函数重载 动态多态指的是运行时 在程序运行…

变限积分求导(带参,极限)

方法 一般形 带参数方程形 带极限型

IDEA 中 Tomcat 日志乱码

1、服务器输出乱码 修改 File -> settings -> Editor -> General ->Console 中,utf-8改为GBK,反之改成utf-8 2、Tomcat Localhost Log 或者 Tomcat Catalina Log乱码 进入Tomcat 中的conf文件中的logging.properties 哪个有问题改哪个&…

Ubuntu:VS Code上C++的环境配置

使用 VSCode 开发 C/C 程序 , 涉及到 工作区的.vscode文件夹下的3个配置文件(均可以手动创建) : ① tasks.json : 编译器构建 配置文件 ; ② launch.json : 调试器设置 配置文件 ; ③ c_cpp_properties.json : 编译器路径和智能代码提示 配置文件 ; …

竞赛保研 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…

uniapp怎么动态渲染导航栏的title?

直接在接口请求里面写入以下: 自己要什么参数就写什么参数 本人仅供参考: this.name res.data.data[i].name; console.log(名字, res.data.data[i].name); uni.setNavigationBarTitle({title: this.name}) 效果:

界面控件DevExpress v23.2全新发布 - 官宣正式支持.NET 8

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…

计算机网络(5):运输层

这一章应该是整个计算机网络对我们来说最重要的,也是用的最多的一部分。 运输层协议 进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。…

c++ 使用 at()访问数组 抛出异常

1、说明 当我们定义一个数组vector b(10)后,b[]和b.at()都可以对v中元素进行访问,平时一般大家使用的都是v[]这种访问方法,以至于将v.at()这种访问方式忘记了。 2、vector[]和vector.at()的区别 b.v[]和b.at()都可以对v中元素进行访问&…