【Shell牛客刷题系列】SHELL1 统计文件的行数:学习wc命令和文本三剑客awk、grep、sed命令

2023-11-03



该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令。

刷题链接:牛客题霸-Shell篇

该系列文章都放到专栏下,专栏链接为:《专栏:Linux》。欢迎关注专栏~

本文知识预告:

  • 首先学习用于统计文件的字节数、单词数、行数等信息的wc命令
  • 然后学习被誉为Linux系统中的文本三剑客的三个命令:awkgrepsed命令,这三个命令是非常热门的命令,后续很多题目都会用到这三个命令;
  • 最后给出五种方案解决统计文件行数的问题。


题目:SHELL1 统计文件的行数

编写一个shell脚本以输出一个文本文件nowcoder.txt中的行数
示例:假设 nowcoder.txt 内容如下:

#include <iostream>
using namespace std;
int main()
{
    int a = 10;
    int b = 100;
    cout << "a + b:" << a + b << endl;
    return 0;
}

你的脚本应当输出:

9

相关命令学习

wc:统计文件的字节数、单词数、行数

wc命令来自于英文词组“Word count”的缩写,其功能是用于统计文件的字节数、单词数、行数等信息,并将统计结果输出到终端界面。利用wc命令可以很快的计算出准确的单词数及行数,评估出文本的内容长度。
语法格式wc [参数] 文件
常用参数

参数 功能
-w 统计单词数
-c 统计字节数
-l 统计行数
-m 统计字符数
-L 显示最长行的长度
--help 显示帮助信息
--version 显示版本信息

统计指定文件的单词数量:

lucky@DESKTOP-VQ8KID4:~/shell$ wc -w nowcoder.txt
30 nowcoder.txt

统计指定文件的字节数量:

lucky@DESKTOP-VQ8KID4:~/shell$ wc -c nowcoder.txt
142 nowcoder.txt

统计指定文件的字符数量:

lucky@DESKTOP-VQ8KID4:~/shell$ wc -m nowcoder.txt
142 nowcoder.txt

统计指定文件的总行数:

lucky@DESKTOP-VQ8KID4:~/shell$ wc -l nowcoder.txt
9 nowcoder.txt

awk:文本和数据进行处理的编程语言

awk命令来自于三位创始人”Alfred Aho,Peter Weinberger, Brian Kernighan “的姓氏缩写,其功能是用于对文本和数据进行处理的编程语言。使用awk命令可以让用户自定义函数或正则表达式对文本内容进行高效管理,与sedgrep并称为Linux系统中的文本三剑客。

语法格式awk 参数 文件

常用参数

参数 功能
-F 指定输入时用到的字段分隔符
-v 自定义变量
-f 从脚本中读取awk命令
-m val值设置内在限制

常用的awk内置变量

awk语法由一系列条件和动作组成,在花括号内可以有多个动作,多个动作之间用分号分隔,在多个条件和动作之间可以有若干空格,也可以没有。

变量名称 说明
FILENAME 当前输入文档的文件名
FNR 当前输入文档的当前行号,尤其当多个输入文档时有用
FS 设置字段分隔符,默认为空格或制表符
NF 当前记录(行)的字段(列)个数
NR 输入数据流的当前记录数(行号)
OFS 输出字段分隔符,默认为空格
ORS 输出记录分隔符,默认为换行符
RS 输入记录分隔符,默认为换行符

awk是一种处理文本文件的编程语言,文件的每行数据都被称为记录默认以空格或制表符为分隔符每条记录被分成若干字段(列)awk每次从文件中读取一条记录

例子:

  1. 仅显示指定文件中第1、2列的内容(默认以空格为间隔符):
lucky@DESKTOP-VQ8KID4:~/shell$ awk '{print $1,$2}' nowcoder.txt
#include <iostream>
using namespace
int main()
{
int a
int b
cout <<
return 0;
}
  1. 以冒号为间隔符,仅显示指定文件中第1列的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ awk -F : '{print $1,$2}' /etc/passwd
root x
daemon x
bin x
...
tcpdump x
sshd x
landscape x
pollinate x
lucky x

/etc/passwd文件中的内容由:分隔开。

  1. 以冒号为间隔符,显示系统中所有UID号码大于500的用户信息(第3列):
lucky@DESKTOP-VQ8KID4:~/shell$ awk -F : '$3>=500' /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
lucky:x:1000:1000:,,,:/home/lucky:/bin/bash
  1. 仅显示指定文件中含有指定关键词main的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ awk '/main/{print}' nowcoder.txt
int main()
  1. 以冒号为间隔符,仅显示指定文件中最后一个字段的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ awk -F : '{print $NF}' /etc/passwd
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
...
/usr/sbin/nologin
/bin/false
/bin/bash
  1. 输出行号,NR将所有文件的数据视为一个数据流,而FNR则是将多个文件的数据视为独立的若干个数据流,遇到新文件时行号从1开始重新递增。
lucky@DESKTOP-VQ8KID4:~$ awk '{print NR}' first.txt three.sh
1
2
3
lucky@DESKTOP-VQ8KID4:~$ awk '{print FNR}' first.txt three.sh
1
1
2

grep:强大的文本搜索工具

grep来自于英文词组“global search regular expression and print out the line”的缩写,意思是用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。

与之容易混淆的是egrep命令和fgrep命令。如果把grep命令当作是标准搜索命令,那么egrep则是扩展搜索命令,等价于“grep -E”命令,支持扩展的正则表达式。而fgrep则是快速搜索命令,等价于“grep -F”命令,不支持正则表达式,直接按照字符串内容进行匹配。

语法格式: grep [参数] 文件

常用参数:

参数 功能
-i 忽略大小写
-c 只输出匹配行的数量
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n 列出所有的匹配行,显示行号
-h 查询多文件时不显示文件名
-s 不显示不存在、没有匹配文本的错误信息
-v 显示不包含匹配文本的所有行
-w 匹配整词
-x 匹配整行
-r 递归搜索
-q 禁止输出任何结果,已退出状态表示搜索是否成功
-b 打印匹配行距文件头部的偏移量,以字节为单位
-o -b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
-F 匹配固定字符串的内容
-E 支持扩展的正则表达式
  1. 搜索某个文件中,包含某个关键词的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
  1. 搜索某个文件中,以某个关键词开头的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
  1. 搜索多个文件中,包含某个关键词的内容:
root@DESKTOP-VQ8KID4:~# grep lucky /etc/passwd /etc/shadow
/etc/passwd:lucky:x:1000:1000:,,,:/home/lucky:/bin/bash
/etc/shadow:lucky:$6$SBxuPYFLSnBcfbHN$OkFFnnJCpf2P4OLOnnaWXMq.xbmgL3H5aRy4nkEkk/.8VHABaKDS6MdYm3UR3TpHZplAl5HVyffI8nbLlAAoh1:19256:0:99999:7:::
  1. 搜索多个文件中,包含某个关键词的内容,不显示文件名称:
root@DESKTOP-VQ8KID4:~# grep -h lucky /etc/passwd /etc/shadow
lucky:x:1000:1000:,,,:/home/lucky:/bin/bash
lucky:$6$SBxuPYFLSnBcfbHN$OkFFnnJCpf2P4OLOnnaWXMq.xbmgL3H5aRy4nkEkk/.8VHABaKDS6MdYm3UR3TpHZplAl5HVyffI8nbLlAAoh1:19256:0:99999:7:::
  1. 输出在某个文件中,包含某个关键词行的数量:
root@DESKTOP-VQ8KID4:~# grep -c root /etc/passwd /etc/shadow
/etc/passwd:1
/etc/shadow:1
  1. 搜索某个文件中,包含某个关键词位置的行号及内容:
lucky@DESKTOP-VQ8KID4:~/shell$ grep -n int nowcoder.txt
3:int main()
5:    int a = 10;
6:    int b = 100;
  1. 搜索某个文件中,不包含某个关键词的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ grep -v int nowcoder.txt
#include <iostream>
using namespace std;
{
    cout << "a + b:" << a + b << endl;
    return 0;
}
  1. 搜索当前工作目录中,包含某个关键词内容的文件,未找到则提示:
root@DESKTOP-VQ8KID4:/# grep -l root *
grep: bin: Is a directory
grep: boot: Is a directory
grep: dev: Is a directory
grep: etc: Is a directory
grep: home: Is a directory
init
grep: lib: Is a directory
grep: lib32: Is a directory
...
grep: tmp: Is a directory
grep: usr: Is a directory
grep: var: Is a directory
  1. 搜索当前工作目录中,包含某个关键词内容的文件,未找到不提示:
lucky@DESKTOP-VQ8KID4:~/shell$ grep -sl main *
nowcoder.txt
  1. 递归搜索,不仅搜索指定目录,还搜索其内子目录内是否有关键词文件:
root@DESKTOP-VQ8KID4:/# grep -srl root /etc
/etc/services
/etc/ltrace.conf
/etc/systemd/logind.conf
/etc/crontab
/etc/newt/palette.ubuntu
/etc/xattr.conf
/etc/apparmor.d/tunables/home
...
  1. 搜索某个文件中,精准匹配到某个关键词的内容(搜索词应与整行内容完全一样才会显示,有别于一般搜索):
lucky@DESKTOP-VQ8KID4:~/shell$ grep -x "return 0;" nowcoder.txt
lucky@DESKTOP-VQ8KID4:~/shell$ grep -x "    return 0;" nowcoder.txt
    return 0;
  1. 判断某个文件中,是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含),方便在Shell脚本中判断和调用:
lucky@DESKTOP-VQ8KID4:~/shell$ grep -q return nowcoder.txt
lucky@DESKTOP-VQ8KID4:~/shell$ echo $?  # 包含
0

lucky@DESKTOP-VQ8KID4:~/shell$ grep -q returns nowcoder.txt
lucky@DESKTOP-VQ8KID4:~/shell$ echo $?  # 不包含
1
  1. 搜索某个文件中,空行的数量:
lucky@DESKTOP-VQ8KID4:~/shell$ grep -c ^$ nowcoder.txt
0

sed:批量编辑文本文件

sed命令来自于英文词组“stream editor”的缩写,其功能是用于利用语法/脚本对文本文件进行批量的编辑操作。sed命令最初由贝尔实验室开发,后被众多Linux系统接纳集成,能够通过正则表达式对文件进行批量编辑,让需要重复的工作不再浪费时间。

sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。

sed命令行格式为:

sed [-nefri] ‘command’ 输入文本    

常用选项:

  • -n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
  • -e:直接在指令列模式上进行 sed 的动作编辑;
  • -f:直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
  • -rsed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
  • -i:直接修改读取的档案内容,而不是由萤幕输出。

常用命令:

  • a:新增, a 的后面可以接字串,而这些字串会在新的一行出现;
  • c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
  • d:删除,因为是删除,所以 d 后面通常不接任何字符;
  • i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p:列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作;
  • s:取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
  • g:是行内进行全局替换

常用参数:

参数 功能
-e 以指定的脚本来处理输入的文本文件
-f<script文件> 以指定的脚本文件来处理输入的文本文件
-h 显示帮助
-n 仅显示script处理后的结果
-V 显示版本信息

参考实例

  1. 查找指定文件中带有某个关键词的行:
lucky@DESKTOP-VQ8KID4:~/shell$ sed -n '/main/p' nowcoder.txt
int main()
  1. 替换指定文件中某个关键词成大写形式:
lucky@DESKTOP-VQ8KID4:~/shell$ sed 's/int/INT/g' nowcoder.txt
#include <iostream>
using namespace std;
INT main()
{
    INT a = 10;
    INT b = 100;
    cout << "a + b:" << a + b << endl;
    return 0;
}

有点巧,这和前面学的Vim里面的替换基本一样。

  1. 读取指定文件,删除所有带有某个关键词的行:
lucky@DESKTOP-VQ8KID4:~/shell$ sed '/int/d' nowcoder.txt
#include <iostream>
using namespace std;
{
    cout << "a + b:" << a + b << endl;
    return 0;
}
  1. 读取指定文件,在第4行后插入一行新内容:
lucky@DESKTOP-VQ8KID4:~/shell$ sed -e '4a\    cout << "hello world" << end;' nowcoder.
txt
#include <iostream>
using namespace std;
int main()
{
    cout << "hello world" << end;
    int a = 10;
    int b = 100;
    cout << "a + b:" << a + b << endl;
    return 0;
}
  1. 读取指定文件,在第4行后插入多行新内容:
lucky@DESKTOP-VQ8KID4:~/shell$ cat nowcoder.txt | sed -e '4a\    cout << "hello world"
 << endl; \n    cout << "hello aha" << endl;'
#include <iostream>
using namespace std;
int main()
{
    cout << "hello world" << endl;
    cout << "hello aha" << endl;
    int a = 10;
    int b = 100;
    cout << "a + b:" << a + b << endl;
    return 0;
}
  1. 读取指定文件,删除第2-5行的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ cat -n nowcoder.txt | sed '2,5d'
     1  #include <iostream>
     6      int b = 100;
     7      cout << "a + b:" << a + b << endl;
     8      return 0;
     9  }
  1. 读取指定文件,替换第2-5行的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ sed '2,5c cout << "gaga" << endl;' nowcoder.txt
#include <iostream>
cout << "gaga" << endl;
    int b = 100;
    cout << "a + b:" << a + b << endl;
    return 0;
}
  1. 指定读取某个文件的第3-7行:
lucky@DESKTOP-VQ8KID4:~/shell$ sed -n '3,7p' nowcoder.txt
int main()
{
    int a = 10;
    int b = 100;
    cout << "a + b:" << a + b << endl;

题目解决方法

方法一:wc -l

wc -l 是用来查看文件的newline的数量的。在Linux系统中,newline字符就是 \n 字符。

lucky@DESKTOP-VQ8KID4:~/shell$ wc -l nowcoder.txt
9 nowcoder.txt

输出中包含了文件名,因此只需要对这个结果再做一下处理即可:

lucky@DESKTOP-VQ8KID4:~/shell$ wc -l nowcoder.txt | awk '{print $1}'
9

awk显示第一列的内容。

当然,如下代码也可以:

lucky@DESKTOP-VQ8KID4:~/shell$ cat nowcoder.txt | wc -l
9

方法二:awk打印行号

由于awk 可以打印所有行的行号

lucky@DESKTOP-VQ8KID4:~/shell$ awk '{print NR}' nowcoder.txt
1
2
3
4
5
6
7
8
9

该输出的最后一行就是文件的行数,结合 tail命令就可以获取到文件的行数。

lucky@DESKTOP-VQ8KID4:~/shell$ awk '{print NR}' nowcoder.txt | tail -n1
9

方法三:awk只打印最后一行

awk本身就可以只打印最后一行,因此一个awk脚本也可以搞定

lucky@DESKTOP-VQ8KID4:~/shell$ awk 'END{print NR}' nowcoder.txt
9

方法四:grep统计行数

使用 grep搜索"",然后利用 grep自带的功能统计行

lucky@DESKTOP-VQ8KID4:~/shell$ grep -c "" nowcoder.txt
9

或者

lucky@DESKTOP-VQ8KID4:~/shell$ grep -n "" nowcoder.txt | awk -F ":" '{print $1}' | tail -n 1
9

方法五:sed统计行数

sed 统计行数

lucky@DESKTOP-VQ8KID4:~/shell$ sed -n '$=' nowcoder.txt
9

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Shell牛客刷题系列】SHELL1 统计文件的行数:学习wc命令和文本三剑客awk、grep、sed命令 的相关文章

  • 如何让“grep -zoP”单独显示每个匹配项?

    我有一个此表格的文件 X this is the first match blabla X this is the second match and here we have some fluff 我想提取 X 之后和相同标记之间出现的所有
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • 如何在 sed 中转义方括号[重复]

    这个问题在这里已经有答案了 我正在使用 grep 和 sed 解析遗留的 C 代码 当尝试替换方括号时 发生了一些奇怪的事情 以下代码替换方括号效果很好 echo xyx xzx xyx sed s g 结果是 xyx xzx xyx 当我
  • 如何删除最后一次出现模式后的所有行?

    我想删除最后一次出现模式之后的所有行 除了模式本身 file txt honor apple redmi nokia apple samsung lg htc file txt 我想要什么 honor apple redmi nokia a
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • Grep 和 Python

    我需要一种通过 Unix 命令行中的正则表达式使用 grep 搜索文件的方法 例如 当我在命令行中输入 python pythonfile py RE file to be searched 我需要正则表达式 RE 在文件中搜索并打印出匹配
  • 使用 posix shell 测试字符串中的正则表达式

    如何测试字符串是否与特定字符串匹配正则表达式与基本 无 bash 或任何其他 posix shell 脚本 在 if 语句中 您可以使用expr在 POSIX shell 中计算正则表达式的命令 s Abc expr s alpha 3 e
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 如何查看正在运行的 tcsh 版本?

    如何查看我的 UNIX 终端中运行的 tcsh 的当前版本 看着那 这version多变的 echo version tcsh 6 14 00 Astron 2005 03 25 i386 intel linux options wide
  • 如何以管理员身份在 rake 任务中运行 shell 命令?

    我有一个简短的 cmd 文件 我想将其作为部署过程的一部分运行 不幸的是 cmd 文件需要管理员权限 是否可以从 rake 中获得管理员权限 或者我是否需要以管理员身份启动 shell 您可以尝试runas http ss64 com nt
  • 从 UNIX 命令行向串行端口发送字节?

    我想使用命令行将字节流发送到串行端口 这可能吗 我的串口位于 dev cu usbserial A700dYoR在我的 Mac 上 例如 如果我想将整数 50 或字符串 data 发送到该串行端口 我该怎么做 我对 UNIX 的了解非常有限
  • 协助 awk/bash 捕获内存差异

    我正在尝试从以下文件中提取以下输出 xr lab show clock Thu Sep 19 14 38 02 812 WIB 14 38 02 893 WIB Thu Sep 19 2019 xr lab xr lab xr lab sh

随机推荐

  • 前滚和回滚详细过程举例

    1 前滚和回滚介绍 前滚和回滚 是Oracle数据库实例发生意外崩溃 重新启动的时候 由SMON进行的自动恢复过程 因为oracle是先把操作命令写到 SGA的log buffer中 然后修改 数据 因此发生故障时 日志中的对数据库修改的记
  • OpenCV代码提取:rotate函数的实现

    OpenCV中并没有直接提供实现rotate的函数 这里通过getRotationMatrix2D和warpAffine函数实现rotate 并增加了一个crop参数 用来判断是否进行crop 目前支持uchar和float两种类型 经测试
  • CSS相关问题

    目录 第三方组件样式修改不生效问题 方法一 非scoped 方法二 deep 深度修改 方法三 lt lt lt 深作用选择器 第三方组件样式修改不生效问题 问题背景 由于el select组件下拉选项被弹窗遮挡 需要修改el select
  • iOS cell.accessoryType在黑暗模式下的显示问题

    iOS UITableViewCell 提供了 accessoryType 属性用来设置 cell 右侧图标 在黑暗模式下使用 发现按钮的颜色比较暗 cell accessoryType UITableViewCellAccessoryDi
  • 卷积神经网络(三)

    六 三维卷积 在经历了二维灰度图的卷积操作之后 如何进行三维卷积 RGB图像 呢 我们一起来看下 首先我们还是给出一个6 6的图像 不过因为有RGB三个通道 所以图像变成了6 6 3 同样的 在二维灰度图中3 3的卷积核也要相应的更改为3
  • 智能家居项目总结以及学习总结

    学习总结 是一段艰辛的路程 是一段值得回忆的经历 一切都是为了秋招 为了将来有更好的生活 为了能够成为一名嵌入式工程师 从熟悉的C语言 半吊子的数据结构和简单算法 linux下的IO操作 进线程编写 socket套接字的应用 QT和C 的学
  • Java+Selenium实现网页截图

    概述 使用Java语言 实现网页截图 本文仅考虑Selenium方案 如果对其他方案感兴趣 可参考Java实现HTML页面截图功能 实现 大名鼎鼎的自动化测试工具 引入最新稳定版依赖
  • mysql计算时间差-本例为计算分钟差然后/60计算小时保留一位小数,由于直接得小时只会取整...

    ORDER TIME datetime NOT NULL 字段类型 SELECTso ID so ORDER TIME NOW CONCAT ROUND TIMESTAMPDIFF MINUTE so ORDER TIME NOW 60 1
  • C++全特化与偏特化

    全特化 全特化一般用于处理有特殊要求的类或者函数 此时的泛型模板无法处理这种情况 include
  • modbus之crc16计算代码

    这边提供两种方式 第1种是查表法方式 速度会快一点 但是需要多占用一些空间 第二种是纯计算方式 速度相对第一种会慢一点 但是比较省空间 代码如下 static const uint16 t crc table 0X0000 0XC0C1 0
  • MFC VS2012对话框背景填图

    这是使用VS 2012编写MFC对话框程序的教程 主要是关于图片处理方面的操作 这些在MFC游戏 图片处理 软件编写中是经常要用到的知识 一 创建项目 文件 新建项目 MFC应用程序 该页面使用 基于对话框 完成即可 注意 取消 使用Uni
  • JMS 规范简介

    本文转载至 深入浅出JMS 一 JMS基本概念 上篇文章ActiveMQ简单介绍以及安装 我们介绍了开源的JMS具体实现 ActiveMQ 这篇博文我们主要介绍MS的基本概念和它的模式 消息的消费以及JMS编程步骤 基本概念 JMS是jav
  • 人脸检测算法:mtcnn简介

    人脸检测算法 MTCNN简介 算法流程 网络介绍 训练方法 MTCNN是一个针对于人脸检测的模型 由PNet RNet 和ONet三个网络组成 三个网络都比较轻量 易于训练 基于pytorch的实现可以看我这篇 链接 l利用celebA数据
  • 【Java基础】有一对兔子,从出生后的第3个月开始,每个月生一对兔子;小兔子同样长到第三个月后,每个月生一对兔子;假如兔子都不死,问第二十个月有多少对兔子?

    public class Demo public static void main String args 问题描述 有一对兔子 从出生后的第3个月开始 每个月生一对兔子 小兔子同样长到第三个月后 每个月生一对兔子 假如兔子都不死 问第二十
  • Mysql日期差函数,Mysql选择两个日期字段相差大于或小于一定时间

    SELECT from table where TIMESTAMPDIFF type pretime latertime gt 100 TIMESTAMPDIFF函数 需要三个参数 type是比较的类型 可以比较FRAC SECOND SE
  • 运算放大电路的基础(秒懂)

    运算放大器 下文简称运放 理想的运放 它的输入阻抗无穷大 输出阻抗为零 理想的运放电路分析有两大重要原则贯穿始终 即 虚短 与 虚断 虚短 的意思是正端和负端接近短路 即V V 看起来像 短路 虚断 的意思是流入正端及负端的电流接近于零 即
  • 【C语言】输入一个N阶矩阵,将其转置后输出。利用指针

    解题思路 将接收到的矩阵存入一个3 3的数组 编写一个函数 从主函数传来一个指向该数组的指针 利用多维数组指针运用规律 实现数组的转置 最后输出转置后的数组 矩阵转置上一篇有讲 C语言 N 阶矩阵的转置 魚肉的博客 CSDN博客 c语言n阶
  • word分页保存_Word邮件合并功能详解:合并后生成多个word文档,删除空白页

    最近在实习 干了很多打杂的工作 所以office软件用的很多很多 瞬间觉得自己可以去裸考计算机二级了哈哈哈哈哈哈 今天因为工作用到了邮件合并这个功能 但又比我之前所学的更深一些 所以我来写下这一篇详解 一 预期达到效果 这是一个信函模板 我
  • MQ是什么

    目录 MQ是什么 MQ是什么 MQ全称为Message Queue 也就是消息队列 是应用程序和应用程序之间的通信方法 在微服务盛行的当下 MQ被使用的也是越来越多 一般常用来进行 业务异步解耦 解耦微服务 流量削峰填谷 消息分发 分布式事
  • 【Shell牛客刷题系列】SHELL1 统计文件的行数:学习wc命令和文本三剑客awk、grep、sed命令

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习用于统计文件的字节数 单词数 行数等信息的