您的位置:首页 > 运维架构 > Linux

linux中的join、paste、split、tr命令

2015-09-01 14:24 736 查看
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 Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd
K.Fletch 23 Woodlea
[root@redhat script]#
[root@redhat script]#cat town.txt
M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
[root@redhat script]#
[root@redhat script]#join names.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 23 Woodlea Mildenhall MAF


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.Jones
S.Round
L.Clip
[root@redhat script]#
[root@redhat script]#cut -d: -f3 pers > pas2
[root@redhat script]#cat pas2
ID897
ID666
ID982
[root@redhat script]#
[root@redhat script]#paste pas1 pas2
P.JonesID897
S.RoundID666
L.ClipID982

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]#cat split1
this is line1
this is line2
this is line3
this is line4
this is line5
this is line6
[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  xac
this is line1
this is line2
=======
this is line3
this is line4
=======
this is line5
this is line6

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 homeeeeeee
Or did theyyyy
[root@redhat script]#tr -s "[a-z]" < oops.txt
And the cows went home
Or did they
[root@redhat script]#
[root@redhat script]#tr -s "[A-Z]" < oops.txt
And the cowwwwws went homeeeeeee
Or did theyyyy
[root@redhat script]#
[root@redhat script]#cat oops.txt | tr -s "[a-z]"
And the cows went home
Or did they
[root@redhat script]#
[root@redhat script]#cat oops.txt
And the cowwwwws went homeeeeeee

Or did theyyyy

ssssssssssssssssssssssssssssss
dd

11111111111111111111111111
[root@redhat script]#
[root@redhat script]#tr -s ["\n"] < oops.txt
And the cowwwwws went homeeeeeee
Or did theyyyy
ssssssssssssssssssssssssssssss
dd
11111111111111111111111111
[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*]"
monday

You 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

原文:http://www.tuicool.com/articles/3AZf2q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: