GVKun编程网logo

bash – 如何计算源代码中的行数(bash源码分析)

5

这篇文章主要围绕bash–如何计算源代码中的行数和bash源码分析展开,旨在为您提供一份详细的参考资料。我们将全面介绍bash–如何计算源代码中的行数的优缺点,解答bash源码分析的相关问题,同时也会

这篇文章主要围绕bash – 如何计算源代码中的行数bash源码分析展开,旨在为您提供一份详细的参考资料。我们将全面介绍bash – 如何计算源代码中的行数的优缺点,解答bash源码分析的相关问题,同时也会为您带来bash – 在两个文件中计算相等的行数、bash – 如何计算unix中文件中的所有空格、Bash – 如何计算指令数量?、bash – 替换sh中的源代码的实用方法。

本文目录一览:

bash – 如何计算源代码中的行数(bash源码分析)

bash – 如何计算源代码中的行数(bash源码分析)

正如标题所说,我如何使用bash命令计算源代码文件夹中的总行数
使用 sloccount

bash – 在两个文件中计算相等的行数

bash – 在两个文件中计算相等的行数

说,我有两个文件,想知道他们有多少相等的行.例如,file1是
1
3
2
4
5
0
10

和file2包含

3
10
5
64
15

在这种情况下,答案应该是3(公共线是’3′,’10’和’5′).

当然,这可以通过python完成,例如,但我很好奇从bash(使用一些标准工具或awk或其他任何东西)这样做.这就是我提出的:

cat file1 file2 | sort | uniq -c | awk '{if ($1 > 1) {$1=""; print $0}}' | wc -l

这对任务来说似乎太复杂了,所以我想知道是否有更简单或更优雅的方法来实现相同的结果.

附:将公共部分的百分比输出到每个文件中的行数也很不错,但这不是必需的.

UPD:文件没有重复的行

要使用awk查找与2个文件共同的行:
awk 'a[$0]++' file1 file2

将输出3 10 15

现在,只需将其传递给wc以获取公共线的数量:

awk 'a[$0]++' file1 file2 | wc -l

将输出3.

说明:

这里的工作类似于默认值为0的字典.当你写一个[$0]时,你会在[$0]中加1,但是这个指令返回一个[$0]的前一个值(见difference between a++ and ++a).所以你第一次遇到某个字符串时会有0(= false),下次会遇到1(或更多,仍然=真).

默认情况下,awk’condition’文件是输出条件为true的所有行的语法.

还要注意每次遇到新密钥时a []数组都会扩展.在脚本结束时,数组的大小将是您在所有输入文件中拥有的唯一值的数量(在OP的示例中,它将是9).

注意:此解决方案计算重复项,即如果您有:

file1 | file2
1     | 3
2     | 3
3     | 3

awk’一个[$0]’file1 file2将输出3 3 3并且awk’一个[$0]’file1 file2 | wc -l将输出3

bash – 如何计算unix中文件中的所有空格

bash – 如何计算unix中文件中的所有空格

我想在unix中计算我文件中的所有空格,我尝试过以下命令

grep " " file1 | wc

它给了我低于输出

3 6 34

我的文件中有3个空格,所以它是准确的命令,还有更多我如何过滤这个以获得确切的空格,所以只有’3’应作为输出,我怎么能删除它

解决方法

以这种方式使用grep和wc来计算空格的出现次数:

grep -o ' ' | wc -l

grep -o将在单独的行中打印每个匹配项.之后可以使用wc -l轻松计算这些行的数量

Bash – 如何计算指令数量?

Bash – 如何计算指令数量?

我有一些* .s汇编文件。 我想要统计它们包含的指令数量。 例如,要计算所有的MUL指令,我需要:

cat *.s | grep -P 't'"mul" | wc -l

这给了我所有的指令复合数。

我想有这样的输出:

mul: 893 add: 12054 sub: 2356 ...

问题是没有目标平台支持的指令表。 每个目标平台都有不同的指令集。 支持的指令必须从现有的程序集文件中推导出来。 我可以在没有Perl / Python代工的情况下在Bash中完成吗?

如何使用预处理器在Linux上识别64位版本?

在32位机器上创build一个64位Debian软件包

在Windows 7中安装py-bcrypt时编译器错误

由CreateFile()函数创build的文本文件不显示

在Windows操作系统的Code :: Blocks编辑器中对fork()的未定义引用

无法在Windows上运行buildr

如何从一个Visual C#项目构build两个不同的应用程序?

Windows API的CreateFile()中的OPEN_ALWAYS和CREATE_ALWAYS之间的区别

Glibc需要多长时间来编译?

C编译器如何发现-lm指向文件libm.a?

你可以像这样得到所有的东西:

grep -hP '^[ t]+[az]*' *.s | sed 's/^[ t]+([az]*).*/1/' | sort | uniq -c

编辑:我改变了这个与SiegeX提供的例子。

输出:

1 call 6 mov 1 push 1 ret 2 syscall 2 xor

假设你的指令是通过使用空格(tab是OK)从其他代码缩进的,那么这个awk 1-liner将起作用:

awk '/^[[:space:]]+/{a[$1]++}END{for(op in a){print op,a[op]}}' /path/to/*.s

输入

$ cat asm.s section .text global _start,write write: mov al,1 ;write syscall syscall ret _start: mov rax,0x0a68732f6e69622f push rax xor rax,rax mov rsi,rsp mov rdi,1 mov rdx,8 call write exit: ; just exit not a function xor rax,rax mov rax,60 syscall

产量

$ awk '/^[[:space:]]+/{a[$1]++}END{for(op in a){print op,a[op]}}' ./*.s push 1 xor 2 ret 1 mov 6 syscall 2 call 1

Bash 4没有任何外部工具:

declare -A c;while IFS=$'n' read -rt;do [[ ! $t =~ ^[[:space:]] ]] && continue;w=($t);((c[${w[0]}]++));done<asm.s;for op in ${!c[@]};do echo $op ${c[$op]};done

为了完成多个文件,将while循环包装for f in *.s循环中的while循环中: done < "$f"或者done这样的done : done < <(cat *.s)而不是for f 。

计算每行的第一个单词而不考虑缩进:

declare -A c;while read -ra t;do [[ $t ]]&&((c[${t[0]}]++));done<asm.s;for op in ${!c[@]};do echo $op ${c[$op]};done

不过,这比其他答案还要长。

只是为了它,SiegeX的Perl awk答案

perl -n '/^s+(w+)/&&$a{$1}++;END{print map{"$_ $a{$_}n"}keys%a}' ./*.s

因为“我能做的任何事情都能以更接近线条噪音的方式去做”( – :

grep -Eo' w +'/source.file | uniq -c

bash – 替换sh中的源代码

bash – 替换sh中的源代码

我需要设置环境变量,通常我们这样做
source script.sh

但现在,我在启动过程中自动化它,它看起来像根启动默认情况下与sh shell。我如何在sh中源这个脚本?

点命令“。是相当于C Shell(和Bash)的源码。
. somefile

请注意,shell使用$ PATH查找文件,但该文件只能是可读的,不可执行。

今天关于bash – 如何计算源代码中的行数bash源码分析的讲解已经结束,谢谢您的阅读,如果想了解更多关于bash – 在两个文件中计算相等的行数、bash – 如何计算unix中文件中的所有空格、Bash – 如何计算指令数量?、bash – 替换sh中的源代码的相关知识,请在本站搜索。

本文标签: