皮皮网
皮皮网

【易企秀源码修改】【java aio源码分支】【fpga 数字转盘 源码】linux awk 源码

来源:dtree 源码 分析 发表时间:2024-11-29 12:55:08

1.linux三剑客之awk
2.linux 三剑客之一--awk学习总结
3.总结Linux中用于文本处理的源码awk、sed、源码grep命令用法

linux awk 源码

linux三剑客之awk

       awk是源码Linux三剑客之一,全名Alfred Aho、源码Peter Weinberger和Brian Kernighan的源码首字母组合,是源码易企秀源码修改一款强大的文本分析工具,具备专门处理字符串的源码功能。

       其工作流程是源码逐行读取文件,并以默认空格为分隔符将行切片,源码进行各类分析处理。源码awk的源码使用格式为`awk '{ pattern + action}' { filenames}`,其中`pattern`定义要查找的源码内容,`action`是源码针对匹配内容执行的命令,`filenames`为待处理文件。源码java aio源码分支

       使用时,源码awk以文件的一行为处理单位,通过读取文件内容并执行相应命令,来实现文本分析。常用参数包括`-F`用于指定分隔符,`-V`用于修改或定义内部变量,`-f`用于从脚本读取命令。

       awk内置变量如NR表示行号,FS表示字段分隔符,等等,提供丰富功能支持。

       下面是一些awk的常用实例:

       1. 搜索`/root`关键字的行:`awk '/root/' /etc/passwd`

       2. 搜索`/root`关键字的行并取指定字段:`awk -F: '/root/ { print $1}' /etc/passwd`

       3. 打印特定行信息:`awk -F : 'NR==5{ print "filename: "FILENAME, $0}' /etc/passwd`

       4. 过滤指定类型的文件:`ls -lF | awk '/^d/'`

       5. 指定特定分隔符查询信息:`awk -F ":" '{ print $NF}' /etc/passwd`

       6. 输出每行行号和字段总数:`awk '{ print NR,$0}' /etc/passwd`

       7. 输出指定列信息:`awk '{ print NR,$1,$5}' /etc/passwd`

       8. 自定义输入分隔符:`awk -v RS=" " '{ print FNR,$0}' pwd.txt`

       9. 输出分隔符自定义:`awk -v ORS="@@@" '{ print NR,$0}' pwd.txt`

       . 正则匹配:`awk '/^docker/{ print $0}' /etc/passwd`

       提取IP地址:`ifconfig ens| awk 'NR==2{ print $2}'`

       查找禁止登陆的用户:`awk '/\/sbin\/nologin/{ print NR,$0}' /etc/passwd`

       这些实例展示了awk的强大功能,通过灵活的fpga 数字转盘 源码模式匹配和处理逻辑,可以高效地进行文本分析与数据提取。

linux 三剑客之一--awk学习总结

       awk,Linux三剑客之一,是一种强大的文本分析工具,尤其在数据报表生成、系统日志分析、数据统计和复杂脚本编写中表现出色。以下将通过几个实际场景,展示awk的使用技巧和功能。

       在数据处理中,awk能够轻松格式化输出,如打印特定列(如report.log中的第1、4、微信sdk 源码8列),并支持自定义分隔符。例如,通过`cat report.log |awk '{ print $1 ,$2, $4, $8}'`提取所需信息。awk的强大还体现在处理复杂数据结构,如多个分隔符提取(如`-F "rpWorker|ReportEntry"`)和数据汇总(如`awk -F ',' '{ sum=sum+$1} END { print sum}'`)。

       对系统日志的实时分析也极其便捷,如计算每秒推送速度,只需通过`cat report.log|awk -F ' ' '{ x[$2]+=$3} END{ for(i in x) print i,x[i]}'|sort`实现。统计特定模块的推送量和速度,如`cat logs/server.out |grep "result size"|awk -F ' ' '{ sum=sum+$3} END{ print sum}'`,也是awk的拿手好戏。

       此外,批量qq注册源码awk还能处理复杂数据提取,如提取手机号码对应的推送时间和msgid,如`cat report.log| awk -F "rpWorker|ReportEntry" '{ for(i=3 ;i}`。awk甚至允许在文本中替换字符,如`sed -i 's/*/\"/g' temp`。

       总之,awk凭借其灵活的工作原理和丰富的功能,为Linux下的数据分析和报告生成提供了强大的支持。掌握awk,将使数据处理更加得心应手。

总结Linux中用于文本处理的awk、sed、grep命令用法

       awk

       基础概念

       Awk把文件(或其他方式的输入流, 如重定向输入)看作一个记录集, 把每一行看作一条记录, 把每一行中以空格(或\t,或用户自己指定的分隔符)分割的字符串看作一个字段. 这似乎把文件记录看成数据库. 但是, awk仍然以行为单位逐行处理. 本例子以下面的文件(命名为s.txt)内容做演示:

       复制代码

       代码如下:

zhangsan male computer

       lisi male math

       wanglijiang female chinese

       xuliang male economic

       xuxin female english

       wangxuebing male math

       lichang male math

       wanglijiang female chinese

       zhangsansan male computer

       langxuebing male math

       lisibao male math

       xiaobao female chinese

       一行中的5个字段分辨表示姓名, 出生年, 性别,科目,分数, 是一个很传统很典型的报表文件.

       Awk基本语法: awk pattern1 { command1;command 2; command 3}pattern2 { command }

       pattern表示用来过滤记录的模式, 可是是正则表达式, 关系运算表达式, 也可以什么也没有(表示选中所有记录);

       每个pattern选中的行记录会被花括号括起来的命令command操作一遍, command之间用;分割. 花括号里面可以什么也没有, 则默认为print输出整行记录. Comamnd可以是输出, 可以是算术运算, 逻辑运算, 循环控制等等.

       先看几个例子, 以建立对awk的命令直观的了解.

       复制代码

       代码如下:

awk // s.txt

        #//直接输出年出生的同学;

       awk /chinese/{ print 语文; print 语文}s.txt

        #// 对chinese的课程的行输出两行语文 +;

       awk { print Yes} s.txt

        #//因为,所以每行输出Yes;

       awk 'BEGIN{ print "Result of the quiz:\n"}{ print}END{ print"---------------------------"}' s.txt

       结果:

       本例有3个花括号,分别对应3个模式, BEGIN和END是特殊模式,分别作用在记录开始前和记录结束后.

       变量: 上面说到command可以是算术运算, 所及运算等, 则既然有运算, 就有常量变量, awk可以自定义变量(不需要提前声明, 但最好在BEGIN里面给它初始化). Awk也维护了一组程序变量:

       变量

       说明

       $0

       当前记录;

       $1, $2, $n

       当前记录的字段

       FILENAME

       当前的文件名

       FS

       输入字段的分隔符, 可通过-F修改. 如: 先通过sed把空格替换为|,然后管道输送给awk:

       sed 's/ /|/g' s.txt | awk -F '|' '/chinese/{ print FILENAME, $1, $5}'

       NF

       当前记录的字段数

       NR

       当前记录编号

       OFS

       输出字段分隔符

       ORS

       输出记录分隔符

       RS

       记录分隔符, 默认为换行符

       给一些例子来说明这些变量的用法:

       复制代码

       代码如下:

awk $4==chinese{ print NR, $1, $4, $5} s.txt #//第四个字段科目为chinese的记录编号, 学生姓名, 科目和成绩.

       awk $2~//{ print $1} s.txt #//找出年出生的学生姓名, ~表示匹配正则表达式

       awk $2!~//{ print $1} s.txt #//找出不是年出生的学生姓名, !~表示不匹配正则表达式

       awk ${ print $1, $2} s.txt #//找出大于年出生的学生姓名,年龄

       awk END{ print total: NR \n---------------- } s.txt

       awk BEGIN{ goodChinese=0; goodMath=0}($4==chinese||$){ goodChinese++}END{ print}

sed

       sed '2,5d' file 显示文件file,除去2-5行,但行数超过文件实际行数时不会报错。

       sed '/[1-4]/d' file 显示文件file,除去包含-的行。

       sed '2,$d' file 显示文件,只显示第一行。sed '2,$!d' file则只显示除第一行外的其它行。

       sed '/^ *$/d file 删除文件中的空行。

       sed -n '/[1-4]/p' file

       只显示文件file中包含-的行。(n和p必须同时使用,否则只有p时显示全部文件并多显示一次找到的行)

       sed -n '5p' file 只显示文件的第5行

       sed 's/moding/moden/g' file 将moding替换为moden

       sed -n 's/^west/north/p' file 将west开头的行替换为north并显示出来。

       sed 's/[0-9][0-9][0-9]$/.5/' file 将file文件中以3个数字结尾的行替换为原数字加.5,代表搜索到的字符串。

       sed 's/moding/\1en/g file 将mod做为模式1封装在括号里,然后替换。

       sed 's/...$//' file 删除每一行的最后三个字符。

       sed 's/^...//' file 删除每一行的头三个字符。

       sed 's#moding#moden#g' file将moding替换为moden,s后面的#代表搜索串和替换串之间的分界符。

       sed -n '//,//p' file 显示从的匹配行到的匹配行。如果只找到的匹配行,则从的匹配行到文件末。

       sed -n '2,//p' file 显示从第2行到匹配行。

       sed'//,//s/$/ /' file将从的匹配行到的匹配行的行末增加 内容。

       sed -e '1,3d' -e 's/moding/moden/g'file 先删除文件的1-3行,再进行替换。

       sed -e '/^#/!d' file 显示文件以#开头的行。

       sed '//r newfile' file 在每个匹配行增加文件newfile的内容

       sed '//w newfile' file 把匹配行写入newfile。

       sed '//a new text' file 在匹配行后增加一新行。

       sed '//i' new text' file 在匹配行前增加一新行。

       sed '//c new text' file 用新行替换匹配行。

       sed 'y/abcd/ABCD/' file 将a、b、c、d分别替换为ABCD。

       sed '5q' file 显示到第5行时退出。

       sed '//{ n; s/moding/moden/g; }' file在文件中找到匹配行的后一行(n)再进行替换。

       sed '//{ s/moding/moden/g; q; }' file在文件中找到第一个匹配行后进行替换后再退出。

       sed -e '//{ h; d; }' -e '//{ G; }'file 在文件中找到与匹配行后先存在一个缓存中,再放在与匹配行后。

       sed -e '//{ h; d; }' -e '//{ g; }'file 在文件中找到与匹配行后先存在一个缓存中,再替代的匹配行。

       sed -e '//h' -e '$G' file 将最后一个匹配行放在文件末。

       sed -e '//h' -e '$g' file 将最后一个匹配行替换文件末行。

       sed -e '//h' -e '//x' file 在文件中找到与匹配行后先存在一个缓存中,再与的匹配行进行互换。

       echo ltr 1.txt | seds/^.* // 找出文件名

grep

       常用的grep选项

       -c 只输出匹配行的计数。// 这条有时候很有用, 不需要再 | wc -l

       -i 不区分大小写(只适用于单字符)。

       -h 查询多文件时不显示文件名。

       -l 查询多文件时只输出包含匹配字符的文件名。

       -n 显示匹配行及行号。

       -s 不显示不存在或无匹配文本的错误信息。

       -v 显示不包含匹配文本的所有行。

       例子

       复制代码

       代码如下:

grep -v "Sort" tab2

       显示不包含匹配文本的所有行

       复制代码

       代码如下:

grep -n "Sort" tab2

       显示匹配行及行号

       复制代码

       代码如下:

grep -c "Sort" tab2

       只输出匹配行的计数

       精确匹配:

       复制代码

       代码如下:

grep """ tab2

       复制代码

       代码如下:

grep -in "code" tab2

       忽略大小写

       多次过滤

       复制代码

       代码如下:

grep -in "code" tab2 | grep ""

       补充说明,grep 家族还包括fgrep和egrep。fgrep是fix grep, 允许查找字符串而不是一个模式,运算速度快,适合于从大量数据中进行检索;egrep是扩展grep,支持基本及扩展的正则表达式,可用()及|等,但不支持q模式范围的应用及与之相对应的一些更加规范的模式。

       复制代码

       代码如下:

echo aAAbbb |egrep '[0-9]*'

       复制代码

       代码如下:

echo AAAbbb | egrep -i '^a'

相关栏目:热点