linux 隔四行取一行命令,linux 文本处理

文本处理命令字符串截取和替换命令

=============

1.1. printf格式化输出

printf '输出类型输出格式' 输出内容

1190000023482584

1190000023482584

1190000023482584

由此可以,printf是一个格式类型加计算过程的顺序

输出类型

%ns (string)输出字符串,n是数字代表输出几个字符

%ni (int)输出整数。 n是数字代表输出几个数字

%n.mf (float)输出浮点数,n代表总位数,m代表小数位

输出格式

\a 响铃

\n 换行

\t 输出制表符,即tab键

\r 回车

\v 水平制表符

printf 命令输出文件内容

printf '%s' $(cat student.txt) (以字符串形式查看文件内容)

1190000023482584

这样看起来很乱只能通过制表符隔开,格式化输出printf可以识别制表符分隔符

1190000023482584

把成绩变为整型,平均成绩变为浮点型printf ' %s\t %s\t %s\t %s\t %s\t %s\t \n' $(cat student.txt) 但是发现,第一行文字不能识别成数字,然后自动变为0

1190000023482584

printf不识别管道符之后会联系awk命令,此时想要去除第一行字符,先print,grep 写在管道符之后,如下图

1190000023482584

1.2. 文本三剑客

回忆grep命令

1190000023482584

局限性:只能提取行,不能提取列

选项

-o 只输出过滤内容

-i 不区分大小写

-w 以单词为单位进行过滤

-E 支持扩展正则

-n输出时带行号

1190000023482584

-c 统计

-v取反

-A 过滤字符所在行以及其下几行(可以指定数字)

1190000023482584

-B 过滤字符所在行以及其上几行

1190000023482584

-C过滤字符所在行以及其上下几行

1190000023482584

-q 安静模式

awk基本使用(行列都可以处理)

awk 选项(-F指定分隔符) 'BEGIN {操作} 匹配模式{动作1} 匹配模式{动作2}…… END {操作}' 文件名(匹配模式和动作用大括号区分,多个匹配模式中间用空格隔开)

printf和print

printf(需要输入”\n“自动换行符)

1190000023482584

print(不需要输入换行符可以自动换行)

1190000023482584

awk可以提取空格和制表符为分隔符的内容

查看磁盘使用百分率,并将%去掉(以%为分隔符取第一列)

1190000023482584

awk的选项-F 指定分隔符

若果想要打印2列用“,(默认以空格作为分隔符)”或者双引号指定分隔符

1190000023482584

1190000023482584

如果想要在分隔符中间再添加其他分隔符,双引号和单引号交替使用,可以再次调用变量为分隔符

1190000023482584

1190000023482584

awk的条件

awk运行过程详解

1190000023482584一行一行处理,一个字段一个字段处理并输出:如果有BRGIN先执行BRGIN,之后讲第一行所有数据赋给$0,然后第一行第一列赋给$1第二列赋给$2······直到第一列全部赋值完成后,,如果需要输出,先把第一行满足条件的列输出。在将整个第二列赋值给$0,然后第二列的第一行赋值$1······最后执行END结束如果有匹配模式,进行匹配,匹配成功执行操作,不成功,读取下一行

awk 保留字BRGIN :在awk程序一开始时,尚未读取的任何数据之前执行,只在程序开始时执行一次(用于手工指定分隔符)

1190000023482584

在输出之前先输出个11111END :在awk程序处理完所有数据,即将结束执行。END后的动作只在程序结束时执行一次

1190000023482584

如果每一行列相同,可以交给‘END {print NF}’去处理,可以通过最后一行的列数统计处列数,但是如果不相同,则不能在END中统计

1190000023482584

awk关系运算符运算符

> 大于

< 小于

>=

统计成绩大于等于86分的学生的名字(首先排除第一行,如果,第六行大于86,则输出第二行)

1190000023482584

步骤:先判断有没有BEGIN,之后把第一行的数据附在aek中,把第一列,第二列......赋值在$1,$2......继续把第二行的数据赋值在AWK中......这样执行下去,哦按段也如此,先判断第一行的第6列是否大于86,在判断第二行的第六列是否大于86()

<=

== 等于

统计/etc/passwd下UID为1000的用户名

1190000023482584

等于和不等于可以完全匹配字符,此时切记字符要加双引号

1190000023482584

!= 不等于

包含匹配字符串和完全匹配

1190000023482584

A~B 判断字符串A中是否包含匹配B

判断第二列中名字包含Sc的学生的平均成绩(第六段)指定具体的某一列是因为防止一行中多个列都出现“Sc”字段

1190000023482584

awk识别字符必须使用//包含字符串正则表达式

//支持正则可以使用通配符哦

1190000023482584

如果一行没有重复的字段,无需怎加“$2~”包含符号

1190000023482584

A!~B 判断字符串A中是否不包含匹配B

1190000023482584

正则表达式/正则/

输出Lm的平均成绩(指定列更好)

1190000023482584awk在匹配模式和指定分的隔符都可以使用正则表达式

awk内置变量

$0 代表awk所读入的整行数据(相当于不写)

$n 代表当前读入行第n列字段(第n列)补充:cut默认只能以制表符作为空格,而awk默认可以以制表符和空格作为分隔符

NR 显示行号和NF当前拥有字段(列)数NR和NF都是写入到print中

1190000023482584由上图可知,虽然都正确输出,但是不够清晰,中间如果要加入制表符和相关解释说明的中文,要放入到双引号中

1190000023482584NF详解

$NF代表打印的是最后一列

1190000023482584

若每行列相同,统计列数可以交给END配合$NF处理NR详解

$NR代表最后一列

NR一般代用在匹配模式下,指定输出某行

1190000023482584

如果指定打印3-5行

1190000023482584

指定打印第三行和第5行

1190000023482584

FNR awk同时处理两个文件可以用到

1190000023482584由此可知,当NR>FNR时就可以判断,已经开始处理第二个文件

1190000023482584

1190000023482584

OFS和ORSOFS指定输出的字段分隔符(默认为空格),输出时体现ORS指定输出的记录分隔符,(即一个模块识别操作的分隔符,默认为换行符),输出时体现

1190000023482584写在BEGIN中指定分隔符()

RS和FSFS 指定分隔符,默认是空格或者制表符(以废,同选项中的“F”)识别时起作用

打印/etc/passed的用户名

如果不加BENGIN,会先把第一行读完,然后再指定分隔符已经晚了,第一行会被直接输出

1190000023482584

修改后显示

1190000023482584

此处可见BEGIN的用处()

看似cut更加简单,但是如果指定第三行uid必须为1000的用户,cut无法完成此条件截取,awk是这样截取的

1190000023482584RS指定读取记录分隔符,默认是换行符,识别时起作用

ENVIRON调用系统中的变量,不需要用$调用ENVIRON["PATH"]

1190000023482584

FILENAME 当前处理的文件名

参数个数和参数组ARGC命令参数的个数相当于shell中的 $ARGV命令参数数组,相当于$@ $*

getline获取下一行(类似于sed中的N;)

1190000023482584

1190000023482584获取行并模块化,getline之后$0变成了第二行,所以第一行的值必须用tmp保存sed实现方式

1190000023482584

以N加分号配合换行符替代方式实现。为了方便记忆,在替换中所有-n和p一律省略

length("字符串") 求字符长度

1190000023482584输出变量配合echo使用求行字符长度为2的行,不要慌,放在条件中而已

1190000023482584

split() 切割字符串化为数组形式处理

1190000023482584格式:split("字符串",数组名称,"分隔符") 按指定分隔符将字符串且各位数组

1190000023482584子主题 4

1190000023482584

大小写取代toupper() 小写换大写tolower() 大写换小写

1190000023482584

字符串截取

1190000023482584

字符串替换(sub和gsub)

1190000023482584sub(gsub)(“需要被替换的字符”,“替换成的字符”,“要被替换的字段”)sub代表只替换一个字符,gsub代表本字段的所有字符都替换,指定输入哪个字段来表示,$0为整行全部替换

1190000023482584吧字符”0“替换成字符”?“,只替换第一行,然后输出整行

时间函数strftime() 格式化输出,类似于date

1190000023482584systime() 获取时间戳

1190000023482584

system() 调用linux系统命令

支持判断循环 if ; else if ; else ; while 支持数组

awk计算字符串格式化输出(输出格式和计算过程用逗号隔开)

1190000023482584

1190000023482584非格式化输出极简版

1190000023482584

print支持直接计算

awk例题

例题1,截取stat中的权限方法1(管道符分开截取)

1190000023482584方法2(正则匹配一步到位)

1190000023482584

例题2,截取网址各种秀就对了

1190000023482584

sed命令(选项都是英文,主要处理行)

sed(Stream Editor)流文件处理工具主要是用来将数据进行选取、替换、删除、新增,作用,替代vim的作用,不需要进行交互

格式:sed [选项] '地址 操作;地址 操作;······' 文件名(单引号中分号将多个部分隔开,地址和操作空格隔开)

sed工作流程

sed命令将一行读取到模式空间(由上到下一行一行打印)

进行匹配,如果匹配成功,就执行操作,如果不匹配就丢弃,读取下一行

直到读取到文件最后一行

选项:

-n 只打印处理的行,多结合操作p一起(对比图:)

1190000023482584

-i sed修改结果直接修改文件内容,而不是由屏幕输出删除2-4行,并写入数据

1190000023482584

-r 支持扩展正则

地址操作

;可以隔离多个操作‘动作1; 动作2;动作3......‘将第三行和第四行删除并写入可以直接在地址中加入分号进行多行操作

1190000023482584

查p 打印输出指定行

1190000023482584

2p打印第二行 2,4p打印2到4行 2,$打印第二行到文件结尾(一般加-n)

1190000023482584正则使用方法

使用正则/字符表达式/

此时和grep作用相似(包含匹配)

1190000023482584

例子2

1190000023482584

-r 让sed支持扩展正则

1190000023482584

增a 行追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾要用 “\”代表数据未完结

在第二行后追加一个 11111111

1190000023482584

使用 “\”追加,怕自动换行导致单词失效 输出"\"回车自动换行输入

1190000023482584i 行插入,当前行前插入一行或多行。"\"作用同上

1190000023482584

删d 行删除,删除指定行

删除2-4行输出屏幕

1190000023482584

改c \行替换,"\" 作用同上

基本替换“c”(替换不需要-n和p了)

将整个第三行替换为4 abc 11 22 33 44.5

1190000023482584

将第三行替换为 aaaaaaaa

1190000023482584

sed字符串替换

sed字符串全局替换

格式:sed ' s/old/new/g ' student.txt

把Sc改成SS,把74改成99 把Tg改成TT

1190000023482584

批量加注释:sed 's/^/#/g' studnet.txt

1190000023482584

把第二行换成11111,第三行换成22222

1190000023482584

sed局部替换(可用于截取字符串)

1190000023482584

格式:

s/(.*).../12.../

\数字,取第几个肉

分隔符“/”或者“#”

第三段可以指定输出多段

1190000023482584

例1:卡域名

卡之前和卡之后都要卡才能卡准

1190000023482584

“/”作为分隔符的话需要用#,没有/做分隔符可以用“/”

1190000023482584

例2:卡stat里面的权限

1190000023482584

当然一口气划分好也可以

1190000023482584

极简版,不太好看

1190000023482584

例3:取用户

1190000023482584

替换操作

1190000023482584

分组打印-n 读入下一行,上一行位于模式空间中的内容会被顶替掉(可以指定奇数行和偶数行)

1190000023482584

1190000023482584N与上一行同时保持在模式空间(两行两行读取,和paste相似,每多写一个n就会多一行并入)配合替换使用

1190000023482584

1190000023482584

写两个N中间用;表示将后两行与第一行分成一个组

1190000023482584

1190000023482584

1190000023482584

w 保存

1.3. 所有文本处理大总结

wc -L head tail grep -w

${字符串 操作}

操作部分(: : #(#) 字符*字符 %(%)字符 *字符 /(/)字符/字符)

cut -d ‘ ’ -f 2,4,6,8······

tr 常用tr -s 去除多余空格 tr -d ' ' 去除空格 tr [a-z] [A-Z]替换

sort -n 排序 -t -k 2(2,2;3.1) -r反向排序

uniq 配合sort -c统计重复行

paste 用于合并以及分行

-s 一行输出

-d 指定连接符,两行合并可以-d "符号/n"

超过两行合并使用-d " " - - -

xargs -n 数字 以字段合行

join 若第一列相同则合并,其他列按照第一列的规则(行数)输出在后,否则不输出

sed -nr 'N;N;(分行必备) s/\n//g;(N必配) s/(.*)(.*)(.*)(.*)/\1\3\5/ p'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值