`

Linux-文本处理

阅读更多
Linux下文本的处理

Sort(排序)文本

Sort工作原理就是从每一行作为一个工作单位,进行相互比较,比较的原则是从首字符向后,一次按照ASCII Code进行比较,最后将他们按升序输出:

sort sort.txt

如果希望按照降序排列:使用-r参数

Sort –r sort.txt

Sort默认是输出到标准输出,如果想输出到文件,我们需要进行重定向:

sort -r sort.txt  -o sort.txt.bak

如果让排序以数值来排序而不是以字符来排,需要使用-n参数。

sort -n sort.txt

按照字典顺序排序

sort –d sort.txt

忽略大小写排序

sort –f sort.txt

去重复:

sort –usort.txt

但是-u只是对键值有效,对于其他部分就无效了。比如

1 xse

2 Hun

3 hun

1 mk

他依然会去掉整key=1整个记录,只留一条。

关于排序关键字:

-t分隔符 –k分割之后的哪一列

sort -t: -k3 -n /etc/group

按照:分割,然后你去分割后的第三列进行排序。

但是sort命令是不稳定,虽然高效。如果想确保稳定性,需要加上

- stable,但是这样效率没法直接和sort比了,所以需要在平时工作中做一下权衡。

sort -t: -k3 -n --stable  /etc/group

 

文本去重复

Uniq去重复,然后只留下第一条。

他常常用于管道命令,比如sort之后去重复。

参数详解:

-c : 再输出行前面加上每一行在输出文件中出现的次数。

sort -r /tmp/sort.txt | uniq –c

-d :仅显示重复行

sort -r /tmp/sort.txt | uniq -d

-u: 仅显示不重复的行

sort -r /tmp/sort.txt | uniq –u

三:统计文本行数,字数以及字符数

Wc:也适用于管道命令

默认会显示行数,单词数,字符数以及文件path.

wc /etc/passwd

-c 仅显示字符数

wc –c /etc/passwd

-w 仅显示单词个数

wc –w /etc/passwd

-l 仅显示行数

wc –l/etc/passwd

 

高级应用:

查找某个文件下某个文件的个数

find /etc/ -iname "*.conf" | wc -l

查找某个文件包含某个字符的个数

grep nicky /tmp/Pattern.txt | wc -c

 

统计多个文件:

Wc /etc/*rc

 

四:打印和格式化输出

Pr命令可以将文本转换成适合打印的文件,将一个大文件分割成几个页面,然后每一个页面架上标题。

-c10 :表示设置列的个数,不能与-m一起使用

-d:产生2个空格输出

-h : 指定字符串作为页眉,否则将文件名字打印为页眉

-l ;指定每一页行数,如果不指定默认是 66行。

-o:每一行缩进字符位置数目。

-t;不要显示标题

Fmt命令格式化文本:

Fold限制文本宽度:

将超过限定列宽的列加入增列字符后,输出到标准输入设备读取数据。

-w: 指定最大行宽

-b: 按照字节数计算宽度。

 

五:提取文本的开头和结尾:

Head;提取文件的开头行数,默认是10

如果想自定义提取的函数需要使用 数字

head -2 /tmp/sort.txt提取sort.txt文件前2行。

 

Tail:提取文件的末尾行数:

它刚好是和head相反。

 

 

六:字段处理

Cut去除文本字段

有的时候可能遇到这种情况,去除某以通讯录中取出姓名和家庭住址:

Cut被设计用来从一个文本文件或者文本流中提取文本列。

-b:指定字节

-c:指定字符位置:必须紧挨着cut

cut -c 1-20 /etc/address.txt那么前20个字符被截取出来

-f :指定字段的列,如果有多个用,分割

-d :以什么作为分隔

cut -d ':' -f 1,3 /etc/address.txt

以:分隔,cut第一个和第三个字段

 

Join:连接字段

Linux下的join命令可以连接不同的文件,是的具有相同的key值得记录连接在一起,然后他根据指定的栏位,找到两文件中栏位内容相同的行,将他们合并。

[root@(none) etc]# cat /etc/a.txt

A Link

B Hundon

C kyle

D Single

E Perl

[root@(none) etc]# vi /etc/b.txt

[root@(none) etc]# join /etc/a.txt /etc/b.txt

A Link $1900

B Hundon $200

C kyle $340

D Single $1000

E Perl $500

-a参数

指定join的输出结果和第一个文件记录进行比较,如果其余文件没有这个key,则仅显示第一个文件的记录,-a2就刚好相反。

-e :用指定的字符串来代替空字符串

 

七:文本替换

使用tr替换字符:

Tr 从标准输入删除或者替换字符,并将结果写入标准输出。

格式 tr str1 str2

Tr{-d | -s} str

功能:转换字符,使用-d删除字符,使用-s标志出去序列。

[root@(none) tmp]# tr 'A-Z' 'a-z' < sort.txt>sort.bak

[root@(none) tmp]# vi sort.bak

Tr命令从标准输入读入,重定向到sort.bat

分享到:
评论

相关推荐

    Linux教程-linux-文本处理-grep.docx

    Linux 教程 - 文本处理 - grep grep 命令是 Linux 系统中最常用的文本处理工具之一,它可以根据用户指定的模式对目标文本逐行进行匹配检查,并打印匹配到的行。grep 命令的格式为:grep [OPTIONS] PATTERN [FILE......

    qt-opensource-linux-x64-5.9.1.rar

    在中标麒麟系统上,由于其基于Linux内核但又具有中国特色,可能需要确保安装过程中处理好依赖关系,有时可能需要手动安装或更新一些库。同样,Ubuntu用户也需注意其默认的库版本可能与QT不完全兼容,可能需要安装...

    xampp-linux-x64-7.4.6-0-installer.zip

    **Perl**:Perl是一种功能丰富的通用编程语言,常用于文本处理和系统管理任务。在XAMPP环境下,Perl可以用来编写脚本或辅助Web开发过程。 **安装过程**:"xampp-linux-x64-7.4.6-0-installer.run" 文件是一个shell...

    cmake-3.16.0-Linux-x86-64.tar.gz

    压缩包中还包含一个名为“cmake-3.16.0-Linux-x86_64.tar.gz.txt”的文本文件,这通常用来存储有关压缩包的详细信息,如编译时的配置选项、使用指南、许可协议或者发布者的注释。用户可以阅读这个文件获取更多关于这...

    jdk11 java11 linux版 jdk-11.0.2_linux-x64_bin.tar.zip

    - **改进的字符串处理**:包括对`String`类的优化,如`lines()`方法,用于按行分割字符串,以及`strip()`和`stripIndent()`方法,用于去除字符串两侧的空白字符。 2. **Linux版JDK**: - Linux是流行的开源操作...

    jdk-8u151-linux-x64.tar.gz

    在压缩包子文件的文件名称列表中,我们看到有两个文件:jdk-8u151-linux-x64.tar.gz和新建文本文档.txt。前者是我们的主要关注点,即JDK的压缩文件,通常包含bin目录下的可执行文件(如java、javac等)、lib目录下的...

    jdk-7u80-linux-x64.rpm.zip

    2. "新建文本文档.txt" - 这通常是Windows操作系统中创建的一个默认文件名,可能是包含有关JDK安装或使用指南的文本文件。用户可能需要打开这个文件来获取附加信息或步骤,比如安装指南、配置说明或者版本说明等。 ...

    jdk-8u333-linux-x64.tar.gz

    在压缩包的文件列表中还提到了"linux——jdk8版本.txt",这可能是一个包含了Linux系统上JDK 8版本相关信息的文本文件,例如安装步骤、注意事项或其他配置细节。 总之,JDK 8对于Java开发者来说是一个重要的里程碑,...

    jdk-8u162-linux-x64.tar.gz.zip

    "zip"是另一种跨平台的文件压缩格式,常见于Windows系统,但也可以在Linux中处理。这里文件名结尾有".zip",意味着这个".tar.gz"文件被进一步压缩成了ZIP格式,可能是为了适应更广泛的解压工具或场景。 标签"jdk...

    jdk-8u261-linux-x64.tar.gz

    至于“新建文本文档.txt”,这可能是一个意外的文件,通常在Linux环境中不会用到,因为Linux系统使用的是纯文本文件,通常以`.txt`结尾的文件可能在Windows环境中创建。如果它与JDK安装无关,可以忽略。 总结来说,...

    linux-2.6.22.6_jz2440.patch

    在Linux世界里,补丁通常是一个文本文件,包含了对源代码的修改指示,这些指示可以被"patch"命令所理解和应用,以更新原有的源代码树。 "linux-2.6.22.6"代表了Linux内核的一个具体版本。Linux内核的版本号由三部分...

    jdk-8u151-linux-x64.tar.gz 【官方jdk1.8 linux版】

    - 编写Java代码:使用任何文本编辑器或IDE如IntelliJ IDEA或Eclipse。 - 编译Java源文件:使用`javac`命令,例如`javac HelloWorld.java`。 - 运行Java程序:使用`java`命令,例如`java HelloWorld`。 - 使用...

    最新版linux jdk-11.0.15.1_linux-x64_bin.tar.gz

    - **字符串切片**:提供`String#lines()`方法,方便处理文本文件。 - **ZGC**:一种低延迟的垃圾收集器,适用于大内存应用。 **2. JDK 11.0.15.1更新** JDK 11.0.15.1是一个小版本更新,主要修复了已知的漏洞和优化...

    cmake-3.23.2-linux-x86_64.tar.gz

    CMake是一款跨平台的自动化构建系统,用于...总的来说,CMake是Linux环境中不可或缺的工具,尤其对于处理复杂的多层依赖关系和跨平台构建任务。了解和熟练使用CMake能够提升开发和运维效率,让软件构建过程更加顺畅。

    jdk-15.0.2_linux-x64_binrpm.zip

    2. **Text Blocks**:这是一个新的字符串语法,允许程序员方便地处理多行文本,减少不必要的转义字符和字符串连接。 3. **JEP 380: Strongly-Typed HTTP Client**:提供了新的HTTP客户端API,增强了类型安全性和API...

    jdk-8u144-linux-x64.tar.gz.zip

    本文将详细探讨JDK 8u144,针对Linux x64平台的版本,以及如何处理相关的压缩文件。 首先,让我们来认识一下"jdk-8u144-linux-x64.tar.gz.zip"这个文件名。它表明我们正在处理的是一个适用于Linux 64位系统的JDK...

    官网下载的protoc,linux版本的protoc-3.0.0-linux-x86_64.zip

    总的来说,"protoc-3.0.0-linux-x86_64.zip"是protobuf的Linux版本编译器,对于需要在Linux环境中处理结构化数据的开发者来说,是一个必不可少的工具。通过它,你可以轻松地将数据模型转换为实际的代码,从而在各种...

    最新版linux jdk-15.0.1_linux-x64_bin.tar.gz

    文本块允许程序员更方便地处理多行字符串,减少了转义字符的需求,提高了代码可读性。 2. **Switch表达式增强**:Java 12引入了Switch表达式的实验性支持,Java 15中这一特性更加成熟。现在,Switch可以作为表达式...

    jbr-linux-x64-202110301849

    解压并覆盖原有文件后,需要重启IDE以使改动生效,这样软件就能正确识别和处理Linux系统下的输入法操作。 在标签中,我们看到了“linux”,这意味着这个问题和解决方案是针对Linux操作系统的。“源码软件”可能意味...

    jdk-8u161-linux-i586.rpm.zip

    压缩包子文件的文件名称列表中提到了两个文件:`jdk-8u161-linux-i586.rpm`和`新建文本文档.txt`。第一个文件是JDK的RPM安装包,如前所述。第二个文件“新建文本文档.txt”可能是一个意外或者遗漏的文本文件,通常...

Global site tag (gtag.js) - Google Analytics