字段处理
1).使用cut选定字段
cut 语法
cut -c list [file...]
cut -f list [-d delim] [file...]
-c list :以字符为主,执行剪下操作
-f list :以字段为主,执行剪下操作
-d delim :通过-f选项,以delim作为定界符,默认为空格
实例:
[gz_fieldyang@ test ~]$ ls -l | grep example
-rw-rw-r-- 1 gz_fieldyang gz_fieldyang 50 Mar 4 16:06 example.txt
[gz_fieldyang@ test ~]$ ls -l |grep example|cut -c 1-5,40-50
-rw-r 50 Mar 4 #取1-5,40-50两段
[gz_fieldyang@ test ~]$ cat /etc/passwd |grep field
gz_fieldyang:x:859:859::/home/gz_fieldyang:/bin/bash
[gz_fieldyang@ test ~]$ cut -d: -f 1 /etc/passwd |grep field
gz_fieldyang #以分号为定界符取第一段
[gz_fieldyang@ test ~]$ cut -d: -f 6 /etc/passwd |grep field
/home/gz_fieldyang
[gz_fieldyang@ test ~]$ cut -d: -f 2-6 /etc/passwd |grep field
x:859:859::/home/gz_fieldyang #以分号为定界符取第二到六段
[gz_fieldyang@ test ~]$ cut -d: -f 2,6 /etc/passwd |grep field
x:/home/gz_fieldyang
[gz_fieldyang@ test ~]$
2).使用join连接字段:
用法:以共同一个键值,将已存储文件内的记录加以结合
找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备
join语法
join [option...] file1 file2
join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或 2>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2]
常用参数说明:
-a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
-e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
-i或--igore-case 比较栏位内容时,忽略大小写的差异。
-o<格式> 按照指定的格式来显示结果。
-t<字符> 使用栏位的分隔字符。
-v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
-1<栏位> 连接[文件1]指定的栏位。
-2<栏位> 连接[文件2]指定的栏位。
--help 显示帮助。
--version 显示版本信息。
实例:创建文件发file1和file2内容如下
[gz_fieldyang@ test ~]$ cat > sales
# 业务员数据
# 业务员 量
Kin_ma 210
Jones_yan 212
Field_yang 118
Will_wu 260
[gz_fieldyang@ test ~]$ cat > quotas
#配额
#业务员 配额
Kin_ma 102
Jones_yan 132
Field_yang 263
Will_wu 282
[gz_fieldyang@ test ~]$ join quotas sales
Will_wu 282 260 #未删除注释,结合最后一行
#删除注释后,可结合所有数据
[gz_fieldyang@ test ~]$ join sales quotas
Kin_ma 210 102
Jones_yan 212 132
Field_yang 118 263
Will_wu 260 282
[gz_fieldyang@ test ~]$
实例:结合两个文件的脚本
[gz_fieldyang@ test ~]$ cat > merge-sales.sh
#!/bin/bash
#merge-sales.sh
#
# 结合配额与业务员数据
# 删除数据并排序数据文件
sed '/^#/d'quotas | sort >quotas.sorted
sed '/^#/d'sales | sort >sales.sorted
#以第一个键值做结合,将结果产生至标准输出
join quotas.sorted sales.sorted
# 删除缓存文件
rm quotas.sorted sales.sorted
[gz_fieldyang@ test ~]$ chmod +x merge-sales.sh
[gz_fieldyang@ test ~]$ ./merge-sales.sh
Field_yang 263 118
Jones_yan 132 212
Kin_ma 102 210
Will_wu 282 260