声明:下面介绍的只是命令的常用选项,如果需要详细了解命令全部细节,需要参考其他的资料。

一、cut

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。

-d:自定义分隔符,默认分隔符是制表符。

-f:指定显示哪个区域

示例:

(my_python_env)[root@hadoop26 ~]# echo "a b c" | cut -d ' ' -f
a
(my_python_env)[root@hadoop26 ~]# echo "a b c" | cut -d ' ' -f ,
a b
(my_python_env)[root@hadoop26 ~]# echo "a b c" | cut -d ' ' -f -
a b c

二、sort(转载,原文地址:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html)

sort命令的作用是对文本进行排序。

2.1sort的工作原理

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

示例:

[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear

2.2sort的-u选项

在输出行中去除重复行。

示例:

[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
pear
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
pear
[rocrocket@rocrocket programming]$ sort -u seq.txt
apple
banana
orange
pear

pear由于重复被-u选项无情的删除了。

2.3sort的-r选项

sort默认的排序方式是升序,如果想改成降序,就需要使用-r

[rocrocket@rocrocket programming]$ cat number.txt

[rocrocket@rocrocket programming]$ sort number.txt

[rocrocket@rocrocket programming]$ sort -r number.txt

2.4sort的-o选项

由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。

但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。

[rocrocket@rocrocket programming]$ sort -r number.txt > number.txt
[rocrocket@rocrocket programming]$ cat number.txt
[rocrocket@rocrocket programming]$

看,竟然将number清空了。

就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。

[rocrocket@rocrocket programming]$ cat number.txt

[rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt
[rocrocket@rocrocket programming]$ cat number.txt

 2.5sort的-n选项

你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。

我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!

[rocrocket@rocrocket programming]$ cat number.txt

[rocrocket@rocrocket programming]$ sort number.txt

[rocrocket@rocrocket programming]$ sort -n number.txt

2.6sort的-t和-k选项

如果有一个文件的内容是这样:

[rocrocket@rocrocket programming]$ cat facebook.txt
banana::5.5
apple::2.5
pear::2.3
orange::3.4

这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?
幸好,sort提供了-t选项,后面可以设定间隔符。
指定了间隔符之后,就可以用-k来指定列数了。

[rocrocket@rocrocket programming]$ sort -n -k  -t : facebook.txt
apple::2.5
orange::3.4
banana::5.5
pear::2.3

我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。

2.7sort的-f选项

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

2.8sort的-t和-k选项的扩展

源文件是:

$ cat facebook.txt
google
baidu
guge
sohu

第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资。

我想让这个文件按公司的字母顺序排序,也就是按第一个域进行排序:(这个facebook.txt文件有三个域)

$ sort -t ‘ ‘ -k  facebook.txt
baidu
google
guge
sohu

我想让facebook.txt按照公司人数排序

$ sort -n -t ‘ ‘ -k  facebook.txt
guge
baidu
sohu
google

我想让facebook.txt按照公司人数排序 ,人数相同的按照员工平均工资升序排序:

 sort -n -t ‘ ‘ -k  -k  facebook.txt
guge
sohu
baidu
google

看,我们加了一个-k2 -k3就解决了问题。对滴,sort支持这种设定,就是说设定域排序的优先级,先以第2个域进行排序,如果相同,再以第3个域进行排序。(如果你愿意,可以一直这么写下去,设定很多个排序优先级)

我想让facebook.txt按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序:(这个有点难度喽)

$ sort -n -t ‘ ‘ -k 3r -k  facebook.txt
baidu
google
sohu
guge

此处有使用了一些小技巧,你仔细看看,在-k 3后面偷偷加上了一个小写字母r。你想想,再结合我们上一篇文章,能得到答案么?揭晓:r和-r选项的作用是一样的,就是表示逆序。因为sort默认是按照升序排序的,所以此处需要加上r表示第三个域(员工平均工资)是按照降序排序。此处你还可以加上n,就表示对这个域进行排序时,要按照数值大小进行排序,举个例子吧:

$ sort -t ‘ ‘ -k 3nr -k 2n facebook.txt
baidu
google
sohu
guge

看,我们去掉了最前面的-n选项,而是将它加入到了每一个-k选项中了。

 三、join

功能介绍:找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。join强大呀,像sql里 面的join 呢.join工作方式。这里有两个文件f i l e 1和f i l e 2,当然已经分类。每个文件里都有一些元素与另一个文件相关。由于这种关系, join将两个文件连在一起,这有点像修改一个主文件,使之包含两个文件里的共同元素。

注意:这两个文件必须已经在此列上是按照相同的规则进行了排序。

测试文件准备:

file1:

(my_python_env)[root@hadoop26 ~]# cat file1
aa 1 2
bb 2 3
cc 4 6
dd 3 3

file2:

(my_python_env)[root@hadoop26 ~]# cat file2
aa 2 1
bb 8 2
ff 2 4
cc 4 4
dd 5 5

3.1最基本的用法

(my_python_env)[root@hadoop26 ~]# join file1 file2
aa 1 2 2 1
bb 2 3 8 2
join: file 2 is not in sorted order

(my_python_env)[root@hadoop26 ~]# join file2 file1
aa 2 1 1 2
bb 8 2 2 3
join: file 1 is not in sorted order

默认以两个文件的第一列做匹配字段,默认以空格(不限个数)做分隔符。

3.2-j选项

-j选项指定了两个文件的join使用的域

(my_python_env)[root@hadoop26 ~]# join -j  file1 file2
aa
bb
join: file is not in sorted order
(my_python_env)[root@hadoop26 ~]# join -j  file1 file2
bb aa
join: file is not in sorted order
join: file is not in sorted order

3.3-1 FIELD -2 FIELD

以file1中field字段进行匹配和以file2中field字段进行匹配

(my_python_env)[root@hadoop26 ~]# join -  -  file1 file2
aa aa
bb bb
cc ff
cc cc

3.4-o选项、-e选项和-a选项

-o:用来指定文件的输出格式,1.2就代表输出第一个文件的第二个列

-e:空域处理

-a:后面接1或者2,把文件1或者文件2中不匹配的行也显示出来

(my_python_env)[root@hadoop26 ~]# join -o 1.1 -o 1.2 -o 1.3 -o 2.1 -o 2.2 -o 2.3 -e 'empty' -a  file1 file2
aa aa
bb bb
cc empty empty empty
dd empty empty empty
join: file is not in sorted order

3.5-v选项

-v和-a相似,但是只显示不匹配的行

(my_python_env)[root@hadoop26 ~]# join -v  file1 file2
cc
dd
join: file is not in sorted order

3.6join标准输入

有时我们需要将多个格式相同的文件join到一起,而join接受的是两个文件的指令,此时我们可以使用管道和字符“-"来实现
join file1 file2 | join - file3 | join - file4
这样就可以将四个文件 连接到 一起了。

文本处理命令--cut、sort、join的更多相关文章

  1. 文本处理命令(sort+uniq+cut+tr+wc)+三剑客之sed

    目录 文本处理命令+三剑客之sed 一.文本处理命令 1.排序命令 sort 2.检查/删除命令 uniq 3. cut 显示特定部分命令 4. 替换或删除命令 tr 5.统计 计算数字命令 wc 二 ...

  2. Linux学习总结(十八)几个简单的文本处理工具cut sort tr split

    1 命令cut 用来截取某一个字段格式 : cut -d '分隔符' [-cf] n, n为数字,表示第几段-d:后面跟分隔符,分割符要加单引号-c:后面接的是第几个字符-f:后面接的是第几段那么意思 ...

  3. centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课

    centos shell基础知识 alias  变量单引号 双引号   history 错误重定向 2>&1  jobs  环境变量 .bash_history  source配置文件 ...

  4. Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs

    在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail ...

  5. 【转】linux中的cut/tr/join/split/xargs命令

    1. cut命令 cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出. 截取的方式有三种:一是按照字符位置,二是按照字节位置,三是使用一个分隔符将一行分割成多个field, ...

  6. 常用命令ls cd cp mv touch mkdir pwd rm cut sort tr more less

    ls  -ldhtai 显示目录下面的文件 ls -l 显示详细信息 ls -d 显示当前目录 ls -t 以时间先后顺序显示 ls -a 列出所有文件包括隐藏文件 ls -i 显示文件的inode号 ...

  7. Linux中的高级文本处理命令,cut命令,sed命令,awk命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields    ## 用于有特定分隔字符 [r ...

  8. linux命令使用 cut/sort/uniq

    我记得之前去XX网面试的那个面试题是这样的:有个apache.log 文件文本内容如下:======================[niewj@centSvr ~]$ cat apache.log  ...

  9. Linux Bash命令杂记(cut sort uniq wc tee)

    Linux Bash命令杂记(cut sort uniq wc tee) 数据流重定向 标准输入(stdin):代码为0,使用<或<<: 标准输出(stdout):代码为1,使用&g ...

随机推荐

  1. selenium启动firefox、ie、chrome各浏览器方法

    1.启动firefox浏览器 a.如果你的本地firefox是默认路径安装的话,如下方式即可启动浏览器 WebDriver driver = new FirefoxDriver(); driver.g ...

  2. 使用commons-codec包加密字符串(MD5,SHA1,BASE64)

    1. [代码]MD5 String str = "abc"; DigestUtils.md5Hex(str); //附.net生成MD5的方法,生成内容跟java一致: Strin ...

  3. [datatable]两个DataTable 连接

    using System; using System.Collections.Generic; using System.Text; using System.Data; namespace Cons ...

  4. using inno setup uninstall default icon

    If you set SetupIconFile then the Uninstall Exe File (e.g. unins000.exe) will have exactly same icon ...

  5. Codeforces 626G Raffles 【贪心】【线段树】

    题意: 给n个奖池,t张彩票,q次操作. 每个奖池的奖金为pi. 每个奖池现有的彩票的数量为ai,保证ai>=1: q次操作,每次有两种,第i个奖池的现有彩票数量加一,或减一. 不允许投票的数量 ...

  6. 向Page对象注册脚本

    在madn上ClientScriptManager 类的示例: <%@ Page Language="C#"%> <!DOCTYPE html PUBLIC &q ...

  7. 【转】一个URL编码和解码的C++类

    下面的代码实现了一个用于C++中转码的类strCoding.里面有UTF8.UNICODE.GB2312编码的互相转换. .H文件: #pragma once #include <iostrea ...

  8. [ CodeVS冲杯之路 ] P1171

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1171/ 代码调了很久才调好啊,一开始题目都看错了(要是真的NOIP肯定没戏了QuQ) 后面发现CodeVS上的数据输入 ...

  9. 初探接口测试框架--python系列6

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  10. python学习笔记(sqlalchemy安装失败)

    博主今天折腾了一天sqlalchemy安装问题 下面是失败的截图 直接重新安装python2.7仍未解决此问题 最终在一国外论坛中找到解决的方法: 安装VC++对python的支持文件 VCForPy ...