(1)分割字段的两种方式
#输入以下shell
awk读取输入记录(通常是一行),然后自动将各个记录切分为字段。awk将每条记录内的字段数目,存储到内建变量NF。
几个例子:
#打印非空行,编号0表示整条记录
空白符:space或Tab键
特定的定界符:冒号
#取出第一列和第五列的字段,不需加上cat便可直接读取该字段
#以冒号为定界符
$ cut -d : -f 1,5 /etc/passwd
(3)字段连接的实例----join
两个原文档:
sales: quotas:
joe 100 joe 50
jane 200 jane 75
herman 150 herman 80
chris 300 chris 95
我们的任务是将两个文档合并,以人名为键值
$ vim merge_sales.sh
#输入以下shell
#!/bin/sh -
#merge-sales.sh
#delete remarks and compositor data
sed '/^#/d' quotas | sort > quotas.sorted
sed '/^#/d' sales | sort > sales.sorted
#use the first values as a key to combine
#the result will be inputed to standin
join quotas.sorted sales.sorted
#delete cushion files
rm quotas.sorted sales.sorted
(4)重新编排字段----awk
awk读取输入记录(通常是一行),然后自动将各个记录切分为字段。awk将每条记录内的字段数目,存储到内建变量NF。
几个例子:
#打印第一个字段,以冒号为分隔符
$ awk 'BEGIN{FS=":"}{print $1}' /etc/passwd
#打印第一行和最后一个字段
$ awk 'BEGIN{FS=":"}{print $1 $NF}' /etc/passwd
#打印非空行,编号0表示整条记录
$ awk 'NF > 0 {print $0}' /etc/passwd
#printf和-F的应用
$ awk -F: '{printf "User is really %s\n",$1,$5}' /etc/passwd
# -F可以自动设置FS变量,如果不加此参数,$5将不会被打印,而且在$1打印完#毕之后还会继续打印知道遇到$结束符