将文本进行切割linux_Linux中的文本分析

本文详细介绍了Linux中用于文本分析和查看的命令,包括cat、tac、nl、rev、more、less、head、tail、cut、paste、grep、wc、sort、uniq、diff和patch等。重点讲解了awk命令的使用,awk不仅支持正则表达式,还允许自定义分隔符、变量和流程控制,是强大的文本分析工具。
摘要由CSDN通过智能技术生成

2976c58938669c0eb7b0381385f58f2b.png

【128】

文本查看、分析、统计

1. 文件查看

1.1 cat命令说明**

格式

cat [option]…[file]…

应 用

主要功能连接文件,标准输入,标准输出

选 项

-A:相当于-vET的整合选项,可列出一些特殊符号

-n:对显示出的每一行进行编号

-E:显示行结束符$

-b:非空行编号

-s:压缩连续的空行成一行

例:显示文件/etc/issue的特殊字符,[tab]会以^I表示,断行字符则是以$表示, Windows中的断字符^M$。               
[root@hai6 ~]$cat -A /etc/issue
ICentOS release 6.10 (Final)$
 Kernel r on an m$
n l t$
v$

1.2 tac命令说明

格式

tac [option]…[file]…

功能

功能与cat相似,输出结果由最后一行到第一行方向在屏幕上显示出来

1.3 nl命令说明

命 令

nl [option]…[file]…

功能

可以将输出的文件自动加上行号

选 项

-b:指定行号,空行不显示

-ba:列出空行行号

-n:列出行号的表达方式后面跟ln、rn、rz三种表达方式

-w:行号字段的占用字符数,后跟数字

1.4 rev命令说明

命令:rev

功能:将文件中的每行内容以字符我单位反序输出,即第一个字符最先输出。

2. 分页查看文件内容

2.1 命令more

命令格式

more [options…] file…

功能

将文件在屏幕中分页显示,解决文件过长看不到开始的问题

5bae3d2b817351bb74e674a6d40028f9.png

2.2 命 令less

  • 功能
    将文件在屏幕中分页的过滤器,比more增加了回翻功能

b8460168f240a1403b64a7ca0fc68c9b.png

3. 文件选择查看

3.1 命令head

命令格式

head [option]…[file]…

功能

显示文件的前几行,默认为10行

选 项

-c#:指定获取前#字节

-n#:指定获取前#行

-# :指定行数,可以为负数,意思为后面的#行不显示出来

3.2 命令tail

命令格式

tail [option]…[file]…

功能

显示文件的后几行,默认为10行

选 项

-c#:指定获取后#字节

-n#:指定获取后#行

-# :指定行数

-f : 跟踪显示文件fd新追加的内容,常用日志监控,相当于 - -follow=descriptor

-F:跟踪文件名,相当于- -follow= name - -retry

PS1:命令tailf类似tail-f,当跟踪文件没有更新是,不访问文件,节省资源

4.文件抽取与合并

4.1 命令cut

命令格式

cut [option]…[file]…

应 用

标准输出文件内容,分解数据

选 项:

-d DELIMITER:指定分隔符,默认tab,与-f一起使用

-f fieds:(f#) 第#个字段,(f#,#,#)离散的多个字段,(f#-#)连续的多个字段,例如1-6

混合使用例如1-3,7

-c :按字符切割

-output-delimiter=STRING 指定输出分隔符

示例

按字符切割,可以选择区间,也可以单独第几个字符后

    [root@hai6 ~]$cut -c 15-20  /etc/passwd
    t:/roo
    /bin:/

4.2 paste

命令格式

paste [option]…[file]…

应 用

合并两个文件同行号的列到一行

选 项

-d分隔符:指定分隔符,默认用tab

-s :所有行合成一行显示

4.3 命令grep

命令格式

grep [option] PATTERN [file]…

功能

文本搜索工具,根据用户指定模式对目标文本逐行进行匹配检查,打印匹配到的行

选 项

–color=auto:对匹配到的文本着色显示,centos7默认已经定义了别名

-v:显示不被pattern匹配到的行

-i:忽略字符大小写

-n:显示匹配到的行号

-c:统计匹配到的行数

-f:指定规则文件,查找符合规则条件的文件内容,格式为每行一个规则样本

-o:仅显示匹配到的字符串

-q:静默模式,不输出任何信息,判断是否找到使用标识符

echo $,找到显示为0,找不到显示非0

-A#:后#行,用于想要搜索结果行没有明显关键字,

利用前后标识,指向搜索结果

-B#:前#行

-C#:前后各#行

-e:实现多个选项间的逻辑or关系 grep -e ‘cat’ -e ‘ dog’ file

-w:匹配整个单词

-E:使用ERE

-F:相当于fgrep,不支持正则表达式

示例

示例1:1-100里有多少个数字包含9

    [root@V9centos7 ~]$seq 100|grep -c 9
    19

示例2:显示文件f1和f2的交集。利用-f选项,空格也算不同规则,所以不匹配。

[root@V9centos7 ~]$cat -A f1
abc cba$
help $
exit$
wc$
[root@V9centos7 ~]$cat -A f2
abc cba$
help$
passwd$
 wc$
[root@V9centos7 ~]$grep -f f1 f2
abc cba
wc

5 分析文本工具

5.1 命令wc

格式

wc [option]…[file]…

应 用

计算文件的byte数、字数或列数

选 项

-c :只显示字节数

-l :只显示列数

-w :只显示单词数

-m :只显示字符数

-L :显示文件中最长行的长度

示例

如图所示,三个字段从左向右分别为行、字数、字符数

[root@V9centos7 ~]$cat /etc/passwd|wc
49      96    2505

5.2 命令sort

命令格式

sort [option]…[file]…

应 用

将文件排序,将结果标准输出

选 项:

-r :执行反方向整理

-R :随机排序

-n :执行按数字大小整理

-f :选项忽略字符串中的大小写

-u :删除输出中的重复行

-t c:使用c作为字段界定符(这里只是用c表示一下,可替换)

-k x:按照使用c字符分隔的x列来整理能够使用多次

示例

将/etc/gtoup的GID按从小到大排列,示例中以:为分隔符取第三列,按数字排序

[root@V9centos7 ~]$sort -n -k3 -t: /etc/group
root:x:0:gentoo
bin:x:1:gentoo
daemon:x:2:
sys:x:3:

5.3 命令uniq

命令格式

uniq [option]…[file]…

应用

从输入中删除青后详解的重复行

选 项:

-c :显示每行重复出现的次数

-d :仅显示重复过的行

-u :仅显示没重复过的行,连续且完全相同为重复

6. 文件比较

6.1 命令diff

命 令

diff [option]…[file]…

应 用

比较给定的两个文件的不同,如果是目录,比较该目录中具有相同文件名的文件,而不会对子目录文件进行比较

选 项

-u:输出统一的diff格式文件,适用于补丁文件

6.2 命令path

格式

patch [option]…[file]…

应 用

让用户利用设置修补文件的方式,修改,更新原始文件

选 项

-b:备份每一个原始文件

示例

利用diff与patch进行文件备份复原,diff比较文件f1,f2,生成diff格式补丁文件f3

'1:比较f1、f2两文件将输出结果导入文件f3'
[root@V9centos7 ~]$diff -u f1 f2>f3
[root@V9centos7 ~]$cat f3
--- f1	2018-08-01 20:56:55.853020328 +0800
+++ f2	2018-08-01 20:57:51.344020475 +0800
@@ -1,4 +1,4 @@
abc cba
-help 
-exit
+help
+passwd
wc
'2:文件f2内容'
[root@V9centos7 ~]$cat f2
abc cba
help
passwd
wc
'3:将文件f2删除'
[root@V9centos7 ~]$rm f2
rm: remove regular file ‘f2’? y
'4:输入命令path以f1为源文件,输入补丁文件f3,还原f2(生成文件名为f1),原文件变为f1.orig'
[root@V9centos7 ~]$patch -b f1<f3
patching file f1
[root@V9centos7 ~]$cat f1
abc cba
help
passwd
wc


1、awk简介

awk是一个强大的文本分析工具,也可以说是Linux下一门字符串处理语言,它的数据可以来自标准输入(stdin)、一个文件或多个文件、或其他命令的输出。它可以作为命令使用,但更多的是作为脚本使用。

它支持正则表达式、支持自定义变量(类map型数组,只不过索引可以是字符串)、支持内置变量、内置函数、及流程控制语句。

它会依次读取文件的每一行内容, 然后对其进行处理。空格符和制表符为其默认的分割符,使用分割符号对每行进行切片,然后对切开部分进行单独的处理。

2、awk参数

支持自定义分隔符

支持正则表达式匹配 (标准正则)

支持自定义变量,数组 a[1] a[tom] map(key)

支持内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数 本行总列数

NR 已读的记录数 行号

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

控制记录分隔符 支持函数 print、split、substr、sub、gsub

支持流程控制语句,类C语言 if、while、do/while、for、break、continue

$0 代表整个记录,$1表示第一个字段,$2表示第二个字段,一次类推。。。。

按:切割a.txt文件,打印第一列

awk -F':' '{print $1}' a.txt

按:切割a.txt文件,打印第一列和第七列,tab键分隔

awk -F':' '{print $1 "t" $7}' a.txt

按:切割a.txt文件,打印第一列和第七列,表头追加name和shell,表尾追加over,字段间tab键分隔

awk -F':' 'BEGIN{print "nametshell"} {print $1 "t" $7} END{print "over"}' a.txt

打印含root单词的行

awk '/root/ {print $0} ' a.txt

打印含root单词的行后,再打印所有行(搜索值作用于第一个函数)

awk '/root/ {print $0}  {print $0} ' a.txt

打印文件每行的信息,最前方追加行号和该行总列数,用tab键分隔

awk -F':' '{print NR "t" NF "t" $0}' a.txt

报表统计:

数据

    统计报表:合计每人1月工资,0:manager,1:worker
    Tom	 0   2012-12-11      car     3000
    John	 1   2013-01-13      bike    1000
    vivi	 1   2013-01-18      car     2800
    Tom	 0   2013-01-20      car     2500
    John	 1   2013-01-28      bike    3500

统计01月员工工资

awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}} END{for(i in name){print i "t" name[i]}}' a.txt

统计01月员工工资,员工类型为0,末尾追加M,为1末尾追加W

awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5};if($2=="0")
{role[$1]="M"}else{role[$1]="W"}} END{for(i in name){print i "t" name[i] "t" role[i]}}' a.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值