Linux文本处理入门深入解析动手实操

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Linux操作系统实战入门

sort命令的一般格式为:
sort -cmu -o output_file [other options] +pos1 +pos2 input_files
下面简要介绍一下s o r t的参数:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名。
其他选项有:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。
 
例子:
基本sort
sort video.txt>results.out
sort分类求逆
sort -t: -r video.txt
按指定域分类
sort -t: +1 video.txt
数值域分类
sort -t: +3n video.txt
输出结果为:
Alien:HK:119:1982
Boys in Company C:HK:192:2192
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
 
s o r t还有另外一些方法指定分类键。可以指定k选项
sort -t: -r -k4 -k1 video.txt
注意:k选项是从1开始计数
 
开始以域0分类,忽略域2,然后再使用域3分类。
sort -t: +0 -2 +3 video.txt
 
pos用法

  • 1 . 2,意即以第1域最左边第3个字符开始分类,

sort -t: -r +1.2 video2.txt
 
使用head和tail将输出分类
显示最大的一行
sort -t: -r -k4 video.txt | head -1
显示倒数两行
sort -t: -r -k4 video.txt | tail -2
如果使用h e a d或t a i l时想省略显示行数,缺省时显示1 0行
 
 
sort -t: -r -k4 video.txt | tail -1 |awk -F: '{print "Worst rental",$1,"has been rented "$3""}'
 
 
系统sort
cat /etc/passwd | sort -t: +0 |awk -F":" '{print $1}'
 
uniq用法
u n i q用来从一个文本文件中去除或禁止重复行
 
命令一般格式:
uniq -u d c -f input-file output-file
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。一些系统不识别- f选项,这时替代使用- n
 
例子:

cat myfile.txt

May Day
May Day
May Day
Going Down
May Day
 

uniq myfile.txt

May Day
Going Down
May Day
 

uniq -c myfile.txt

      3 May Day
      1 Going Down
      1 May Day
 
使用- d显示重复出现的不唯一行:

uniq -d myfile.txt

May Day
 
对特定域进行测试
使用- n只测试一行一部分的唯一性。

cat parts.txt

AK123 OP
DK122 OP
EK999 OP
 

uniq -f1 parts.txt

AK123 OP
 

uniq -f0 parts.txt

AK123 OP
DK122 OP
EK999 OP
 
Join用法

  • a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。

n.m    n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。
 

cat name.txt

M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd
K.Fletch 12 Woodlea
 

cat town.txt

M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
 
普通的JOIN

join name.txt town.txt

M.Golls 12 Hidd Rd Norwich NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
 
显示不匹配的行

join -a1 -a2 name.txt town.txt

M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
 
以下显示相同结果

join -a1 name.txt town.txt

M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
 
选择性连接
使用- o选项选择连接域
使用1 . 1显示第一个文件第一个域,2 . 2显示第二个文件第二个域,其间用逗号分隔。命令为:

join -o 1.1,2.2 name.txt town.txt

M.Golls Norwich
P.Willey Galashiels
T.Norms Brandon
K.Fletch Mildenhall
 
 
使用-jn m进行其他域连接
例如用文件1域3和文件域2做连接键,命令为

cat pers

P.Jones Office Runner ID897
S.Round UNIX admin ID666
L.Clip Personl Chief ID982
 

cat pers2

Dept2C ID897 6 years
Dept3S ID666 2 years
Dept5Z ID982 1 years
 

join -j1 4 -j2 2 pers pers2   无法显示,有疑问

应该是 join -1 4 -2 2 pers pers2
 

join -1 4 -2 4 -o 1.1,1.2,1.3,2.1,2.2,2.3,2.4 jtxt1 jtxt2

Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/data1/LNWASP1_QUEST_SMALL1_DATA_01.dbf
Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/data1/LNWASP1_audits01.dbf
Feb 22 14:54 Feb 22 14:58 /data/oracle/LNWASP1/data1/LNWASP1_data01_01.dbf
Feb 22 14:54 Feb 22 14:58 /data/oracle/LNWASP1/data1/LNWASP1_index01_01.dbf
Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/data1/LNWASP1_tools_01.dbf
Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/data1/LNWASP1_users_01.dbf
Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/index1/LNWASP1_sysaux02.dbf
Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/index1/LNWASP1_sysaux03.dbf
Feb 22 14:54 Feb 22 14:58 /data/oracle/LNWASP1/redo1/LNWASP1_ctl_01.dbf
Feb 22 14:54 Feb 22 14:58 /data/oracle/LNWASP1/redo2/LNWASP1_ctl_02.dbf
Feb 22 14:54 Feb 22 14:58 /data/oracle/LNWASP1/redo3/LNWASP1_ctl_03.dbf
Feb 22 14:54 Feb 22 14:58 /data/oracle/LNWASP1/rollback/LNWASP1_undotbs01.dbf
Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/system/LNWASP1_sysaux01.dbf
Feb 22 14:53 Feb 22 14:57 /data/oracle/LNWASP1/system/LNWASP1_system01.dbf
Feb 22 05:06 Feb 22 05:06 /data/oracle/LNWASP1/temp/LNWASP1_temp01.dbf
(/apps/oracle/scripts/ADHOC/DOBCPFILETSCHECK/tmp)   (/apps/oracle/scripts/ADHOC/DOBCPFILETSCHECK/tmp)  
 
c u t用法
用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
c u t一般格式为:
cut [options] file1 file2
下面介绍其可用选项:
-c list 指定剪切字符数。
-f field 指定剪切域数。
-d 指定与空格和t a b键不同的域分隔符。

  • c用来指定剪切范围,如下所示:
  • c 1,5-7 剪切第1个字符,然后是第5到第7个字符。

-c1-50 剪切前5 0个字符。
-f 格式与- c相同。
-f 1,5 剪切第1域,第5域。

  • f 1,10-12 剪切第1域,第1 0域到第1 2域。

例子:

cut -d: -f1,6 /etc/passwd

ls -l|cut -c3-6

who -u | cut -c1-8

p a s t e用法
格式为;
paste -d -s -file1 file2
选项含义如下:
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。

paste pers pers2

P.Jones Office Runner ID897     Dept2C ID897 6 years
S.Round UNIX admin ID666        Dept3S ID666 2 years
L.Clip Personl Chief ID982      Dept5Z ID982 1 years

ls -l|paste –s 按照一行粘贴

paste -s pers pers2

P.Jones Office Runner ID897     S.Round UNIX admin ID666        L.Clip Personl Chief ID982
Dept2C ID897 6 years    Dept3S ID666 2 years    Dept5Z ID982 1 years
p a s t e命令还有一个很有用的选项( -)。意即对每一个( -),从标准输入中读一次数据。
ls | paste -d" " - - - -
p l i t用法
命令一般格式:
split -output_file-size input-filename output-filename
这里o u t p u t - f i l e - s i z e指的是文本文件被分割的行数。s p l i t查看文件时,o u t p u t - f i l e - s i z e选项
指定将文件按每个最多1 0 0 0行分割。
tr 用法
t r用来从标准输入中通过替换或删除操作进行字符转换。t r主要用于删除文件中控制字符或进行字符转换。使用t r时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。
带有最常用选项的t r命令格式为:
t r - c - d - s [ " s t r i n g 1 t o t r a n s l a t e f r o m " ] [ " s t r i n g 2 t o t rannsulta_t e t o " ] input-f i l e
这里:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为A S C I I。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
I n p u t - f i l e是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
使用t r时,可以指定字符串列表或范围作为形成字符串的模式。这看起来很像正则表达式,但实际上不是。指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
/octal 一个三位的八进制数,对应有效的A S C I I字符。
[On] 表示字符O重复出现指定次数n。因此[ O 2 ]匹配O O的字符串。

cat oops.txt

And the cowwwwwwwwwwwwws went homeeeeeeeeeeeee
Or did theyyyyyyyy

tr -s "[a-z]"<oops.txt

And the cows went home
Or did they
如果是替换单字符,不需要引号

tr -s w<oops.txt

And the cows went homeeeeeeeeeeeee
Or did theyyyyyyyy

cat oops.txt | tr -s "[a-z]"

And the cows went home
Or did they
删除空行
以下格式都可以:
tr -s "["012]" < plane.txt
tr -s "["n]" < plane.txt
tr -s ['"n'] < plane.txt
tr -s '["n]' < plane.txt
转换大小写
tr "[a-z]" "[A-Z]" <quote.txt    小写全部变大写
tr "[a-z]" "[A-Z]" <quote.txt|tee quote4.txt quote5.txt
cat quote.txt |tr "[:lower:]" "[:upper:]"
删除指定字符

cat jtxt1|tr -cs "a-z" "["012*]"

去除通过ftp上传的文件的控制符号
用t a b键替换^ ^ ^ ^ ^ ^,命令为" " 1 3 6 " " [ " 0 11 * ] "。将结果重定向到临时工作文件s t a t . t m p。

tr -s "["136]" "["011*]" <stat.tr > stat.tmp

用新行替换每行末尾的^ M,并用" n去除^ Z,输入要来自于临时工作文件s t a t . t m p

tr -s "["015"032]" ""n" < stat.tmp

替换p a s s w d文件中所有冒号,代之以t a b键

tr -s "[:]" "["011]" </etc/passwd

匹配多于一个字符
用星号代替所有的0。模式为[ 0 * 4 ],意即匹配至少4个0,替换字符串为星号
tr "[04]" "" < hdisk.txt

相关文章
|
19天前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
27 2
|
1月前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
70 4
|
1月前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
71 3
|
1月前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
2月前
|
弹性计算 网络协议 Ubuntu
如何在阿里云国际版Linux云服务器中自定义配置DNS
如何在阿里云国际版Linux云服务器中自定义配置DNS
|
2月前
|
机器学习/深度学习 Linux 编译器
Linux入门3——vim的简单使用
Linux入门3——vim的简单使用
59 1
|
2月前
|
存储 网络协议 Linux
AWS实操-EC2-创建购买linux(centos)EC2服务器
AWS实操-EC2-创建购买linux(centos)EC2服务器
|
2月前
|
存储 数据可视化 Linux
Linux 基础入门
Linux 基础入门
|
2月前
|
Linux Go 数据安全/隐私保护
Linux入门2——初识Linux权限
Linux入门2——初识Linux权限
30 0
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
67 2