Linux基本指令之sort、uniq、join、cut、paste、split、tr

来源:互联网 发布:php代码格式化工具 编辑:程序博客网 时间:2024/05/01 03:10
sort:sort命令将许多不同的域按不同的顺序分类sort命令的一般格式为:sort -cmu -o output_file [other options] +pos1 +pos2 input_files下面简要介绍一下 sort的参数:-c 测试文件是否已经分类。-m 合并两个分类文件。-u 删除所有复制行。-o 存储sort结果的输出文件名。其他选项有:-b 使用域进行分类时,忽略第一个空格。-n 指定分类是域上的数字分类。-t 域分隔符;用非空格或 tab键分隔域。-r 对分类次序或比较求逆。+n n 为域号。使用此域号开始分类。n n 为域号。在分类比较时忽略此域,一般与 +n一起使用。post1   传递到 m,n。m为域号, n为开始分类字符数;例如 4,6意即以第 5域分类,从第 7个字符开始。sort启动方式:缺省情况下, sort认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用  -t选项。sort执行时,先查看是否为域分隔设置了 -t选项,如果设置了,则使用它来将记录分隔成域0、域1等等;如果未设置,用空格代替。缺省时 sort将整个行排序,指定域号的情况例外。sort的一个重要事实是它参照第一个域作为域 0,域 1是第二个域,等等命令行实例:[root@redhat script]#cat video.txt Boy in Company C:HK:192:1292Alien:HK:119:1982The Hill:KL:63:2972Aliens:HK:534:4892Star Wars:HK:301:4102A Few Good Men:KL:445:5851Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#sort -c video.txt sort: video.txt:2: disorder: Alien:HK:119:1982[root@redhat script]#[root@redhat script]#sort -t: video.txt A Few Good Men:KL:445:5851Alien:HK:119:1982Aliens:HK:534:4892Boy in Company C:HK:192:1292Star Wars:HK:301:4102The Hill:KL:63:2972Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#sort -t: -r video.txt Toy Story:HK:239:3972The Hill:KL:63:2972Star Wars:HK:301:4102Boy in Company C:HK:192:1292Aliens:HK:534:4892Alien:HK:119:1982A Few Good Men:KL:445:5851[root@redhat script]#[root@redhat script]#[root@redhat script]#sort -t: +0 video.txt A Few Good Men:KL:445:5851Alien:HK:119:1982Aliens:HK:534:4892Boy in Company C:HK:192:1292Star Wars:HK:301:4102The Hill:KL:63:2972Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#[root@redhat script]#sort -t: +1 video.txt Alien:HK:119:1982Boy in Company C:HK:192:1292Toy Story:HK:239:3972Star Wars:HK:301:4102Aliens:HK:534:4892A Few Good Men:KL:445:5851The Hill:KL:63:2972[root@redhat script]#[root@redhat script]#sort -t: +2 video.txt Alien:HK:119:1982Boy in Company C:HK:192:1292Toy Story:HK:239:3972Star Wars:HK:301:4102A Few Good Men:KL:445:5851Aliens:HK:534:4892The Hill:KL:63:2972[root@redhat script]#[root@redhat script]#[root@redhat script]#sort -t: +2n video.txt The Hill:KL:63:2972Alien:HK:119:1982Boy in Company C:HK:192:1292Toy Story:HK:239:3972Star Wars:HK:301:4102A Few Good Men:KL:445:5851Aliens:HK:534:4892[root@redhat script]#[root@redhat script]# [root@redhat script]#[root@redhat script]#cat video.txt Boy in Company C:HK:192:1292Alien:HK:119:1982The Hill:KL:63:2972Aliens:HK:534:4892Star Wars:HK:301:4102A Few Good Men:KL:445:5851Toy Story:HK:239:3972Alien:HK:119:1982[root@redhat script]#[root@redhat script]#sort -u video.txt A Few Good Men:KL:445:5851Alien:HK:119:1982Aliens:HK:534:4892Boy in Company C:HK:192:1292Star Wars:HK:301:4102The Hill:KL:63:2972Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#sort -t: +3 video.txt Boy in Company C:HK:192:1292Alien:HK:119:1982The Hill:KL:63:2972Toy Story:HK:239:3972Star Wars:HK:301:4102Aliens:HK:534:4892A Few Good Men:KL:445:5851[root@redhat script]#[root@redhat script]#sort -t: -k4 video.txt Boy in Company C:HK:192:1292Alien:HK:119:1982The Hill:KL:63:2972Toy Story:HK:239:3972Star Wars:HK:301:4102Aliens:HK:534:4892A Few Good Men:KL:445:5851[root@redhat script]#[root@redhat script]#sort -t: -k1 video.txt A Few Good Men:KL:445:5851Alien:HK:119:1982Aliens:HK:534:4892Boy in Company C:HK:192:1292Star Wars:HK:301:4102The Hill:KL:63:2972Toy Story:HK:239:3972[root@redhat script]#sort -t: -k2 video.txt Alien:HK:119:1982Boy in Company C:HK:192:1292Toy Story:HK:239:3972Star Wars:HK:301:4102Aliens:HK:534:4892A Few Good Men:KL:445:5851The Hill:KL:63:2972[root@redhat script]#[root@redhat script]#[root@redhat script]#sort -t: -k2 -k4 video.txt Alien:HK:119:1982Boy in Company C:HK:192:1292Toy Story:HK:239:3972Star Wars:HK:301:4102Aliens:HK:534:4892A Few Good Men:KL:445:5851The Hill:KL:63:2972[root@redhat script]#[root@redhat script]#sort -t: +1 +3 video.txt Alien:HK:119:1982Boy in Company C:HK:192:1292Toy Story:HK:239:3972Star Wars:HK:301:4102Aliens:HK:534:4892A Few Good Men:KL:445:5851The Hill:KL:63:2972[root@redhat script]#sort -t: +1 -2 +3 video.txt Boy in Company C:HK:192:1292Alien:HK:119:1982Toy Story:HK:239:3972Star Wars:HK:301:4102Aliens:HK:534:4892The Hill:KL:63:2972A Few Good Men:KL:445:5851[root@redhat script]#[root@redhat script]#sort -t: +1.2 video.txt Alien:HK:119:1982Boy in Company C:HK:192:1292Toy Story:HK:239:3972Star Wars:HK:301:4102A Few Good Men:KL:445:5851Aliens:HK:534:4892The Hill:KL:63:2972[root@redhat script]#[root@redhat script]#sort -t: +0.2 video.txt Star Wars:HK:301:4102The Hill:KL:63:2972A Few Good Men:KL:445:5851Alien:HK:119:1982Aliens:HK:534:4892Boy in Company C:HK:192:1292Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#sort -t: +0.0 video.txt A Few Good Men:KL:445:5851Alien:HK:119:1982Aliens:HK:534:4892Boy in Company C:HK:192:1292Star Wars:HK:301:4102The Hill:KL:63:2972Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#sort -t: -r -k4 video.txt | head -1A Few Good Men:KL:445:5851[root@redhat script]#[root@redhat script]#sort -t: -r -k4 video.txt | head -3A Few Good Men:KL:445:5851Aliens:HK:534:4892Star Wars:HK:301:4102[root@redhat script]#[root@redhat script]#[root@redhat script]#sort -t: -r -k4 video.txt | tail -1Boy in Company C:HK:192:1292[root@redhat script]#Boy in Company C:HK:192:1292[root@redhat script]#[root@redhat script]#sort -t: -r -k4 video.txt | head A Few Good Men:KL:445:5851Aliens:HK:534:4892Star Wars:HK:301:4102Toy Story:HK:239:3972The Hill:KL:63:2972Alien:HK:119:1982Boy in Company C:HK:192:1292[root@redhat script]#[root@redhat script]#sort -t: -r -k4 video.txt | tail A Few Good Men:KL:445:5851Aliens:HK:534:4892Star Wars:HK:301:4102Toy Story:HK:239:3972The Hill:KL:63:2972Alien:HK:119:1982Boy in Company C:HK:192:1292[root@redhat script]#[root@redhat script]#[root@redhat script]#cat video.txt Boy in Company C:HK:192:1292Alien:HK:119:1982The Hill:KL:63:2972Aliens:HK:534:4892Star Wars:HK:301:4102A Few Good Men:KL:445:5851Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#cat video2.txt 111111111111111111111222222222222222222222333333333333333333333[root@redhat script]#[root@redhat script]#sort -t: -m video.txt video2.txt 111111111111111111111222222222222222222222333333333333333333333Boy in Company C:HK:192:1292Alien:HK:119:1982The Hill:KL:63:2972Aliens:HK:534:4892Star Wars:HK:301:4102A Few Good Men:KL:445:5851Toy Story:HK:239:3972[root@redhat script]#[root@redhat script]#[root@redhat script]#[root@redhat script]#cat /etc/passwd | sort -t: +0 | awk -F":" '{print $1}'admapachebindaemondbusftpgamesgdmgopherhaldaemonhalthttlpmailnullmailnetdumpnewsnfsnobodynobodynscdntpoperatorpcaprootrpcuserrpcrpmshutdownsmmspsshdsyncuucpvcsaxfsyezhaohui2yezhaohui[root@redhat script]#[root@redhat script]#uniq:uniq用来从一个文本文件中去除或禁止重复行。一般 uniq假定文件已分类,并且结果正确。 我们并不强制要求这样做,如果愿意,可以使用任何非排序文本,甚至是无规律行。可以认为 uniq有点像 sort命令中唯一性选项。对,在某种程度上讲正是如此,但两者有区别。其选项含义:-u   只显示不重复行。-d   只显示有重复数据行,每种重复行只显示其中一行-c   打印每一重复行出现次数。-fn  n为数字,前n-1个域被忽略。 一些系统不识别 -f选项,这时替代使用 -nn。命令行实例:[root@redhat script]#cat myfile.txt May DayMay DayMay DayGoing DownMay Day[root@redhat script]#[root@redhat script]#uniq myfile.txt May DayGoing DownMay Day[root@redhat script]#[root@redhat script]#sort -u myfile.txt Going DownMay Day[root@redhat script]#[root@redhat script]#uniq -c myfile.txt       3 May Day      1 Going Down      1 May Day[root@redhat script]#[root@redhat script]#uniq -d myfile.txt May Day[root@redhat script]#[root@redhat script]#cat parts.txt AK123 OPDK122 OPEK999 OP[root@redhat script]#[root@redhat script]#uniq -c parts.txt       1 AK123 OP      1 DK122 OP      1 EK999 OP[root@redhat script]#[root@redhat script]#uniq -f2 parts.txt AK123 OP[root@redhat script]#[root@redhat script]#uniq -c -f2 parts.txt       3 AK123 OP[root@redhat script]#[root@redhat script]join:join用来将来自两个分类文本文件的行连在一起。文本文件中的域通常由空格或 tab键分隔,但如果愿意,可以指定其他的域分隔符。一些 系统要求使用 join时文件域要少于 20,为公平起见,如果域大于 20,应使用 DBMS系统。让我们看看它的可用选项列表:an  n 为一数字,用于连接时从文件 n中显示不匹配行。例如, -a1显示第一个文件的不匹 配行, -a2为从第二个文件中显示不匹配行。o n.m  n 为文件号, m为域号。 1.3表示只显示文件 1第三域,每个 n,m必须用逗号分隔, 如1.3,2.1。j n m   n为文件号, m为域号。使用其他域做连接域。t   域分隔符。用来设置非空格或 tab键的域分隔符。例如,指定冒号做域分隔符 -t:。命令行实例:[root@redhat script]#cat names.txt M.Golls 12 Hidd RdP.Heller The AcreP.Willey 132 The GroveT.Norms 84 Connaught RdK.Fletch 23 Woodlea[root@redhat script]#[root@redhat script]#cat town.txt M.Golls Norwich NRDP.Willey Galashiels GDDT.Norms Brandon BSLK.Fletch Mildenhall MAF[root@redhat script]#[root@redhat script]#join names.txt  town.txt M.Golls 12 Hidd Rd Norwich NRDP.Willey 132 The Grove Galashiels GDDT.Norms 84 Connaught Rd Brandon BSLK.Fletch 23 Woodlea Mildenhall MAF[root@redhat script]#[root@redhat script]#[root@redhat script]#join -a1 names.txt  town.txt M.Golls 12 Hidd Rd Norwich NRDP.Heller The AcreP.Willey 132 The Grove Galashiels GDDT.Norms 84 Connaught Rd Brandon BSLK.Fletch 23 Woodlea Mildenhall MAF[root@redhat script]#[root@redhat script]#join -a2 names.txt  town.txt M.Golls 12 Hidd Rd Norwich NRDP.Willey 132 The Grove Galashiels GDDT.Norms 84 Connaught Rd Brandon BSLK.Fletch 23 Woodlea Mildenhall MAF[root@redhat script]#[root@redhat script]#[root@redhat script]#join -a1 -a2 names.txt  town.txt M.Golls 12 Hidd Rd Norwich NRDP.Heller The AcreP.Willey 132 The Grove Galashiels GDDT.Norms 84 Connaught Rd Brandon BSLK.Fletch 23 Woodlea Mildenhall MAF[root@redhat script]#[root@redhat script]#join -o 1.1 names.txt  town.txt M.GollsP.WilleyT.NormsK.Fletch[root@redhat script]#[root@redhat script]#join -o 1.2 names.txt  town.txt 121328423[root@redhat script]#[root@redhat script]#join -o 2.1 names.txt  town.txt M.GollsP.WilleyT.NormsK.Fletch[root@redhat script]#[root@redhat script]#join -o 2.2 names.txt  town.txt NorwichGalashielsBrandonMildenhall[root@redhat script]#[root@redhat script]#[root@redhat script]#cat names.txt M.Golls 123 aaaP.Heller 22 bbbP.Willey 132 cccT.Norms 84 dddK.Fletch 45 eee[root@redhat script]#[root@redhat script]#cat town.txt M.Golls Norwich NRD aaaP.Willey Galashiels GDD bbbT.Norms Brandon BSL cccK.Fletch Mildenhall MAF eee[root@redhat script]#[root@redhat script]#join names.txt  town.txt M.Golls 123 aaa Norwich NRD aaaP.Willey 132 ccc Galashiels GDD bbbT.Norms 84 ddd Brandon BSL cccK.Fletch 45 eee Mildenhall MAF eee[root@redhat script]#[root@redhat script]#join -j1 3 -j2 4 names.txt  town.txt aaa M.Golls 123 M.Golls Norwich NRDbbb P.Heller 22 P.Willey Galashiels GDDccc P.Willey 132 T.Norms Brandon BSLeee K.Fletch 45 K.Fletch Mildenhall MAF[root@redhat script]#[root@redhat script]#cut:cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。cut一般格式为:cut [options] file1 file2下面介绍其可用选项:-c list  指定剪切字符数。-f field  指定剪切域数。-d   指定与空格和 tab键不同的域分隔符。-c用来指定剪切范围,如下所示:-c1,5-7  剪切第 1个字符,然后是第 5到第7个字符。-c1-50  剪切前 50个字符。-f 格式与 -c相同。-f 1 ,5  剪切 第1域,第 5域。-f1,10-12  剪切第 1域,第 10域到第 12域。命令行实例:[root@redhat script]#cat pers P.Jones:Office Runner:ID897S.Round:UNIX admin:ID666L.Clip:Personl Chief:ID982[root@redhat script]#[root@redhat script]#[root@redhat script]#cut -d: -f1 pers P.JonesS.RoundL.Clip[root@redhat script]#[root@redhat script]#cut -d: -f2 pers Office RunnerUNIX adminPersonl Chief[root@redhat script]#[root@redhat script]#cut -d: -f3 pers ID897ID666ID982[root@redhat script]#[root@redhat script]#cut -d: -f1,3 pers P.Jones:ID897S.Round:ID666L.Clip:ID982[root@redhat script]#[root@redhat script]#whoroot     pts/0        Dec  7 05:36 (192.168.245.1)root     pts/1        Dec  7 05:51 (192.168.245.1)[root@redhat script]#[root@redhat script]#who | cut -c1-2roro[root@redhat script]#who | cut -c1-4rootroot[root@redhat script]#[root@redhat script]#who | cut -c1-14root     pts/0root     pts/1[root@redhat script]#[root@redhat script]#paste:paste将按行将不同文件行信息放在一行。缺省情况下, paste连接时,用空格或 tab键分隔 新行中不同文本,除非指定 -d选项,它将成为域分隔符。paste格式为;paste -d -s -file1 file2选项含义如下:-d   指定不同于空格或 tab键的域分隔符。例如用 @分隔域,使用 -d@。-s   将每个文件合并成行而不是按行粘贴。-   使用标准输入。例如 ls -l |paste ,意即只在一列上显示输出。 命令行实例:[root@redhat script]#cut -d: -f1 pers > pas1[root@redhat script]#cat pas1 P.JonesS.RoundL.Clip[root@redhat script]#[root@redhat script]#cut -d: -f3 pers > pas2[root@redhat script]#cat pas2ID897ID666ID982[root@redhat script]#[root@redhat script]#paste pas1 pas2P.JonesID897S.RoundID666L.ClipID982[root@redhat script]#[root@redhat script]#paste pas2 pas1ID897P.JonesID666S.RoundID982L.Clip[root@redhat script]#[root@redhat script]#paste -d: pas2 pas1ID897:P.JonesID666:S.RoundID982:L.Clip[root@redhat script]#[root@redhat script]#paste -s pas2 pas1ID897ID666 ID982P.JonesS.RoundL.Clip[root@redhat script]#[root@redhat script]#split:split用来将大文件分割成小文件。有时文件越来越大,传送这些文件时,首先将其分割可 能更容易。使用 vi或其他工具诸如 sort时,如果文件对于工作缓冲区太大,也会存在一些问题。 因此有时没有选择余地,必须将文件分割成小的碎片。split命令一般格式:split -output_file-size input-filename output-filename这里output-file-size指的是文本文件被分割的行数。 split查看文件时, output-file-size选项 指定将文件按每个最多 1000行分割。如果有个文件有 2800行,那么将分割成 3个文件,分别有1000、1000、800行。每个文件格式为 x[aa]到x[zz],x为文件名首字母, [aa]、[zz]为文件名剩 余部分顺序字符组合。命令行实例:[root@redhat split]#pwd/root/yzh/script/split[root@redhat split]#[root@redhat split]#ll总用量 4-rwxrwxrwx  1 root root 84 2011/12/07 07:04:20 split1[root@redhat split]#[root@redhat split]#cat split1 this is line1this is line2this is line3this is line4this is line5this is line6[root@redhat split]#[root@redhat split]#split split1 [root@redhat split]#ll总用量 8-rwxrwxrwx  1 root root 84 2011/12/07 07:04:20 split1-rw-r--r--  1 root root 84 2011/12/07 07:06:15 xaa[root@redhat split]#[root@redhat split]#cat xaa this is line1this is line2this is line3this is line4this is line5this is line6[root@redhat split]#[root@redhat split]#rm -rf xaa[root@redhat split]#ll总用量 4-rwxrwxrwx  1 root root 84 2011/12/07 07:04:20 split1[root@redhat split]#[root@redhat split]#split -2 split1 [root@redhat split]#ll总用量 16-rwxrwxrwx  1 root root 84 2011/12/07 07:04:20 split1-rw-r--r--  1 root root 28 2011/12/07 07:06:46 xaa-rw-r--r--  1 root root 28 2011/12/07 07:06:46 xab-rw-r--r--  1 root root 28 2011/12/07 07:06:46 xac[root@redhat split]#[root@redhat split]#cat xaa && echo ======= && cat xab && echo ======= && cat  xacthis is line1this is line2=======this is line3this is line4=======this is line5this is line6[root@redhat split]#tr:tr用来从标准输入中通过替换或删除操作进行字符转换。 tr主要用于删除文件中控制字符 或进行字符转换。使用 tr时要转换两个字符串:字符串 1用于查询,字符串2用于处理各种转换。 tr刚执行时,字符串 1中的字符被映射到字符串 2中的字符,然后转换操作开始。指定字符串 1或字符串 2的内容时,只能使用单字符或字符串范围。命令格式为:tr-c-d-s["string1_to_translate_from"]["string2_to_t riannpsulta_te_to" ]file这里:-c   用字符串 1中字符集的补集替换此字符集,要求字符集为 ASCII。-d   删除字符串 1中所有输入字符。-s   删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。Input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。字符范围:[a-z]a-z内的字符组成的字符串。 [A-Z]   A-Z内的字符组成的字符串。 [0-9]数字串。/octal   一个三位的八进制数,对应有效的 ASCII字符。[O*n]   表示字符 O重复出现指定次数 n。因此 [O*2]匹配OO的字符串。 大部分 tr变种支持字符类和速记控制字符。字符类格式为 [:class],包含数字、希腊字母、空行、小写、大写、 cntrl键、空格、点记符、图形等等。tr中特定控制字符的不同表达方式:速记符含义八进制方式\aCtrl-G 铃声 \007\bCtrl-H 退格符 \010\fCtrl-L 走行换页\014\nCtrl-J 新行 \012\rCtrl-M 回车 \015\t      Ctrl-I tab键    \011\vCtrl-X        \030命令行实例:(无转换控制字符的例子)[root@redhat script]#cat oops.txt And the cowwwwws went homeeeeeeeOr did theyyyy[root@redhat script]#tr -s "[a-z]" < oops.txt And the cows went homeOr did they[root@redhat script]#[root@redhat script]#tr -s "[A-Z]" < oops.txt And the cowwwwws went homeeeeeeeOr did theyyyy[root@redhat script]#[root@redhat script]#cat oops.txt | tr -s "[a-z]" And the cows went homeOr did they[root@redhat script]#[root@redhat script]#cat oops.txt And the cowwwwws went homeeeeeeeOr did theyyyyssssssssssssssssssssssssssssssdd11111111111111111111111111[root@redhat script]#[root@redhat script]#tr -s ["\n"] < oops.txt And the cowwwwws went homeeeeeeeOr did theyyyyssssssssssssssssssssssssssssssdd11111111111111111111111111[root@redhat script]#[root@redhat script]#tr -s [a-z] < oops.txt And the cows went homeOr did theysd11111111111111111111111111[root@redhat script]#[root@redhat script]#tr -s '[a-z]' < oops.txt And the cows went homeOr did theysd11111111111111111111111111[root@redhat script]#[root@redhat script]#tr -s '["\n"]' < oops.txt And the cowwwwws went homeeeeeeeOr did theyyyyssssssssssssssssssssssssssssssdd11111111111111111111111111[root@redhat script]#[root@redhat script]#[root@redhat script]#echo "May Day,May Day,Going Down..." | tr "[a-z]" "[A-Z]"MAY DAY,MAY DAY,GOING DOWN...[root@redhat script]#[root@redhat script]#[root@redhat script]#echo "May Day,May Day,Going Down..." | tr "[:lower:]" "[:upper:]"MAY DAY,MAY DAY,GOING DOWN...[root@redhat script]#[root@redhat script]#echo "May Day,May Day,Going Down..." | tr "[A-Z]" "[a-z]"may day,may day,going down...[root@redhat script]#[root@redhat script]#echo "May Day,May Day,Going Down..." | tr "[:upper:]" "[:lower:]"may day,may day,going down...[root@redhat script]#[root@redhat script]#echo "monday123" | tr -c "[a-z]" "[\012*]"mondayYou have new mail in /var/spool/mail/root[root@redhat script]#[root@redhat script]#echo "monday12" | tr -c "[a-z]" "[\012*]"monday[root@redhat script]#echo "monday1" | tr -c "[a-z]" "[\012*]"monday[root@redhat script]#echo "monday" | tr -c "[a-z]" "[\012*]"monday[root@redhat script]#[root@redhat script]#echo "0000 hdisk5" | tr "[0*4]" "-"---- hdisk5[root@redhat script]#

原创粉丝点击