制作网站空间域名vultr 做网站空间
第5章 文件的排序、合并与分割 (第四部分之cut命令)
- 4 cut 命令
 - 4.1 选项及其意义
 - 4.2 输出字符 (-c)
 - 4.3 改变分隔符(-d)和提取特定域(-f)
 
- 5 paste 命令
 - 5.1 paste 命令选项及其意义
 - 5.2 基础用法
 - 5.3 分隔符 (-d)
 - 5.4 按行粘贴(-s)
 - 5.5 从标准输入中读取(-)
 
- 6 split命令
 - 6.1 split 命令选项及其意义
 - 6.2 基础用法
 - 6.3 按大小切割(-b)
 - 6.4 按大小切割,但保留完整记录(-C)
 
4 cut 命令
4.1 选项及其意义
| 选 项 | 意 义 | 
|---|---|
| -c | 指定提取的字符数或字符范围 | 
| -f | 指定提取的域数或域范围 | 
| -d | 改变域分隔符 | 
4.2 输出字符 (-c)
[root@2E-8E-22-DC-1E-ED 2023]# cat teacher.db 
D Hou:Beijing University:Beijing:China
Y Zhang:Victory University:Melbourne:Australia
J Luo:Southeast University:Nanjing:China
B Liu:Shanghai Jiaotong University:Shanghai:China
C Lin:University of Toronto:Toronto:Canada
[root@2E-8E-22-DC-1E-ED 2023]# cut -c3 teacher.db 
H
Z
L
L
L
 
4.3 改变分隔符(-d)和提取特定域(-f)
[root@2E-8E-22-DC-1E-ED 2023]# cut -d: -f1,4 test.log  ---提取test.log的第1,4域
B Liu:China
C Lin:Canada
D Hou:China
J Luo:China
Y Zhang:Australia
[root@2E-8E-22-DC-1E-ED 2023]# cut -d: -f1-3 test.log   ---提取test.log的第1,2,3域
B Liu:Shanghai Jiaotong University:Shanghai
C Lin:University of Toronto:Toronto
D Hou:Beijing University:Beijing
J Luo:Southeast University:Nanjing
Y Zhang:Victory University:Melbourne
[root@2E-8E-22-DC-1E-ED 2023]# 
 
5 paste 命令
paste 命令用于将文本文件或标准输出中的内容粘贴到新的文件,它可以将来自不同文件的数据粘贴到一起,形成新的文件。
5.1 paste 命令选项及其意义
| 选 项 | 意 义 | 
|---|---|
| -d | 默认域分隔符是空格或Tab键,设置新的域分隔符 | 
| -s | 将每个文件粘贴成一行 | 
| - | 从标准输入中读取数据 | 
5.2 基础用法
[root@2E-8E-22-DC-1E-ED 2023]# cat file1
Shanghai  Jiaotong  University
University  of Toronto
Beijing   University
Southeast University
[root@2E-8E-22-DC-1E-ED 2023]# cat file2
Shanghai
Toronto
Beijing
Nanjing
Melbourne
[root@2E-8E-22-DC-1E-ED 2023]# 
[root@2E-8E-22-DC-1E-ED 2023]# paste file1 file2
Shanghai  Jiaotong  University  Shanghai
University  of Toronto  Toronto
Beijing   University    Beijing
Southeast University    NanjingMelbourne
[root@2E-8E-22-DC-1E-ED 2023]# paste file2 file1
Shanghai        Shanghai  Jiaotong  University
Toronto University  of Toronto
Beijing Beijing   University
Nanjing Southeast University
Melbourne
 
5.3 分隔符 (-d)
[root@2E-8E-22-DC-1E-ED 2023]# paste -d@ file1 file2
Shanghai  Jiaotong  University@Shanghai
University  of Toronto@Toronto
Beijing   University@Beijing
Southeast University@Nanjing
@Melbourne
[root@2E-8E-22-DC-1E-ED 2023]# paste -d: file1 file2
Shanghai  Jiaotong  University:Shanghai
University  of Toronto:Toronto
Beijing   University:Beijing
Southeast University:Nanjing
:Melbourne
[root@2E-8E-22-DC-1E-ED 2023]# 
 
paste 命令则不同,改变域分隔符是用于设置输出文件的格式。
5.4 按行粘贴(-s)
paste 不加-s选项时,将文件内容“竖着放”,加上-s选项后,将文件内容“横着放”。
[root@2E-8E-22-DC-1E-ED 2023]# paste -d: file1 file2
Shanghai  Jiaotong  University:Shanghai
University  of Toronto:Toronto
Beijing   University:Beijing
Southeast University:Nanjing
:Melbourne
[root@2E-8E-22-DC-1E-ED 2023]# paste -d: -s file1 file2
Shanghai  Jiaotong  University:University  of Toronto:Beijing   University:Southeast University
Shanghai:Toronto:Beijing:Nanjing:Melbourne
 
5.5 从标准输入中读取(-)
[root@2E-8E-22-DC-1E-ED 2023]# ls | paste -d " " - - - - -
area.db export.txt file1 file2 linshi.log
save.txt teacher.db test.log uniq.log word.sh
 
通过读取ls命令的输出结果,再进行粘贴。
 paste命令后的-d""将分隔符设置为空格符,在原本应出现“文件1 文件2”的位置上加上“- ” 选项。例中加了5个“- ”选项,从结果可以看到,粘贴后的每行显示5个文件名,每个 " "选项表示读取1次标准输入数据,即读取到标准输入数据中的一个域。
6 split命令
6.1 split 命令选项及其意义
split 命令的选项用于指定切割的依据
 split命令所切割生成的小文件最多包含1000行记录。
| 选 项 | 意 义 | 
|---|---|
| -或-1 | 此两个选项等价,都用于指定切割成小文件的行数 | 
| -b | 指定切割成小文件的字节 | 
| -C | 与-b选项类似,但是,切割时尽量维持每行的完整性 | 
6.2 基础用法
[root@2E-8E-22-DC-1E-ED 2023]# split -2 teacher.db pro.db[root@2E-8E-22-DC-1E-ED 2023]# ls -l pro.db*
-rw-r--r--. 1 root root 86 7月  27 15:12 pro.dbaa
-rw-r--r--. 1 root root 91 7月  27 15:12 pro.dbab
-rw-r--r--. 1 root root 43 7月  27 15:12 pro.dbac[root@2E-8E-22-DC-1E-ED 2023]# cat pro.dbaa 
D Hou:Beijing University:Beijing:China
Y Zhang:Victory University:Melbourne:Australia[root@2E-8E-22-DC-1E-ED 2023]# cat pro.dbab 
J Luo:Southeast University:Nanjing:China
B Liu:Shanghai Jiaotong University:Shanghai:China[root@2E-8E-22-DC-1E-ED 2023]# cat pro.dbac
C Lin:University of Toronto:Toronto:Canada
[root@2E-8E-22-DC-1E-ED 2023]# 
 
split命令利用-2指定按2行对TEACHER.db 进行切割,即每2行记录切割成1个文件。 PEO.db 指定输出小文件名,由于小文件有多个, split 命令在 PEO.db 后面自动加上编号以区分不同的小文件,编号为aa~zz,即第1个小文件是PEO.dbaa、第2个是PEO.dbab、第3个是PEO.dbac、……,我们逐个查看小文件的记录,前面两个小文件包含2条记录,最后1个小文件只有1条记录。
6.3 按大小切割(-b)
[root@2E-8E-22-DC-1E-ED 2023]# ll teacher.db    --大小220
-rw-r--r--. 1 root root 220 7月  26 15:33 teacher.db
[root@2E-8E-22-DC-1E-ED 2023]# split -b100 teacher.db    --按100切割
[root@2E-8E-22-DC-1E-ED 2023]# ll x*
-rw-r--r--. 1 root root 100 7月  27 15:16 xaa
-rw-r--r--. 1 root root 100 7月  27 15:16 xab
-rw-r--r--. 1 root root  20 7月  27 15:16 xac
[root@2E-8E-22-DC-1E-ED 2023]# cat xaa 
D Hou:Beijing University:Beijing:China
Y Zhang:Victory University:Melbourne:Australia
J Luo:Southeas[root@2E-8E-22-DC-1E-ED 2023]# cat xab
t University:Nanjing:China
B Liu:Shanghai Jiaotong University:Shanghai:China
C Lin:University of Tor[root@2E-8E-22-DC-1E-ED 2023]# cat xac
onto:Toronto:Canada
[root@2E-8E-22-DC-1E-ED 2023]# 
 
split 命令利用-b 选项按100B 切割TEACHER.db 文件,当 split 命令不指定小文件的名字时,将自动以x 开头、 aa~zz为编号对这些小文件进行命名,用Ⅱ命令查看这三个小文件时发现,xaa 和 xab 是100B,xac 是20B,这说明确实按照100B 的大小切割了TEACHER.db文件。但是,当用 cat 命令查看这三个文件时,发现每个文件内容比较凌乱,甚至存放了不完整的单词。因此,split命令-b选项在切割文件时仅考虑了文件大小,并未考虑记录的完整性。
6.4 按大小切割,但保留完整记录(-C)
[root@2E-8E-22-DC-1E-ED 2023]# split -C100 teacher.db 
[root@2E-8E-22-DC-1E-ED 2023]# cat xaa 
D Hou:Beijing University:Beijing:China
Y Zhang:Victory University:Melbourne:Australia
[root@2E-8E-22-DC-1E-ED 2023]# cat xab
J Luo:Southeast University:Nanjing:China
B Liu:Shanghai Jiaotong University:Shanghai:China
[root@2E-8E-22-DC-1E-ED 2023]# cat xac
C Lin:University of Toronto:Toronto:Canada
[root@2E-8E-22-DC-1E-ED 2023]# ll xa*
-rw-r--r--. 1 root root 86 7月  27 15:20 xaa
-rw-r--r--. 1 root root 91 7月  27 15:20 xab
-rw-r--r--. 1 root root 43 7月  27 15:20 xac
[root@2E-8E-22-DC-1E-ED 2023]# 
 
利用-C 选项按100B 切割TEACHER.db 文件,同样得到 xaa、xab 和xac 三个小 文件,但是, xaa是93B、xab是80B、xac是47B,xaa、xab 和 xac 这三个文件存放了完整 的记录,由此可见, -C 选项并不严格按照100B 的大小进行切割,而是在切割时尽量维持每 行的完整性。
