删除txt空行批处理_不可错过的Linux文本批处理技巧——适应大于5G的文本文件...

e4c5d8e185cbdf97de407d9edca365b4.png

我们知道,Linux命令有强大的批处理功能,就是shell啦,这里主要谈文本处理中的sed与awk命令。

为了照顾Linux初学者,在这里,先讲下这两个命令的基础使用。

1.sed

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,在取列上有优势。

sed有很多参数,下面仅列举常用的,其它的可以通过man sed查看。

a 在当前行下面插入文本。

i 在当前行上面插入文本。

c 把选定的行改为新的文本。

d 删除,删除选择的行。

s 替换指定字符。

= 打印当前行号码。

g 表示行内全面替换。

p 表示打印行。

如:sed -i 's/book/books/g' a.txt

将a.txt中的book全部替换为books。

67f5d3198e45aa8b2b0dacdb5d4b7d24.png

sed '/^$/d' file

删除a.txt中空白行。

sed '2d' a.txt

删除a.txt中的第二行内容。

sed -i '4,8d' a.txt

删除 a.txt 中第4行到第8行。


现在来看,如何通过sed来处理大于5G的文本文件。

下图为常规处理文本文件的方法,即通过IO流,采用管道处理文件,当文件小时,对性能影响不大,当文件大于1G时,其时间复杂度会很高。

8f51440f74fc8fc0e092924a28441184.png

因此,采用sed可轻松解决此问题。

如:上文将a.txt中的book全部替换为books


2.awk

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。

awk命令格式和选项:

语法形式

awk [options] 'script' var=value file(s)


常用命令选项:

-F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:

-v var=value 赋值一个用户定义变量,将外部变量传递给awk

-f scripfile 从脚本文件中读取awk命令


awk脚本基本结构:

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,awk取列是优势。

我们直接来看例子。

如:选取ps命令中的第二列,如图所示。

0c89e0dfa7305a9dacfa9f653d265e7a.png

可以看到,如果我们想批量kill进程时,用awk很方便吧。


此外,awk还可以定义多维数组,逻辑运算等。

如:输出3*3列的二维数组,并计算两两元素的乘积。

031218946aebf45e6a8d9a4f1c19b5db.png

通过sed与awk配置使用,在大量文本处理时,可产生事半功倍的效果,看,Linux多强大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值