UNIX 技巧: UNIX 高手的另外 10 个习惯( 四 )


if [ $(whoami) = "root" ]
then
echo "You cannot run this script as root."
exit 1
fi
使用 awk 处理数据
awk 命令似乎始终处在 Perl 的阴影下,但它对于简单、基于命令行的数据处理来说是一个快速、实用的工具 。清单 15 显示了如何开始使用 awk 命令 。若要获取文件中每行文本的长度,请使用 length() 函数 。若要查看字符串 ing 是否出现在文件文本中,请使用 index() 函数,该函数返回 ing 首次出现的位置,这样您就可以使用它来进行进一步的字符串处理 。若要 tokenize(也就是说,将一行拆分为单词长度的片段)某个字符串,请使用 split() 函数 。
清单 15. 基本 awk 处理
$ cat text
testing the awk command
$ awk '{ i = length($0); print i }' text
23
$ awk '{ i = index($0,ing); print i}' text
5
$ awk 'BEGIN { i = 1 } { n = split($0,a," "); while (i <= n) {print a[i]; i;} }' text
testing
the
awk
command
打印文本文件中的指定字段是一项简单的 awk 任务 。在清单 16 中,sales 文件包含每个销售人员的姓名,后跟每月销售数字 。您可以使用 awk 命令来快速获得每个月的销售总额 。缺省情况下,awk 将每个以逗号分隔的值视为不同的字段 。您使用 $n 操作符来访问每个字段 。
清单 16. 使用 awk 对数据进行汇总
$cat sales
Gene,12,23,7
Dawn,10,25,15
Renee,15,13,18
David,8,21,17
$ awk -F, '{print $1,$2 $3 $4}' sales
Gene 42
Dawn 50
Renee 46
David 46
awk 命令可以很复杂并应用于广泛的情景中 。若要更完整地学习 awk 命令,请从命令 man awk 开始,并参阅参考资料部分提供的资源 。
结束语
【UNIX 技巧: UNIX 高手的另外 10 个习惯】成为命令行高手需要进行一些实践 。按照相同的方式处理问题很简单,因为您已经习惯了 。扩展您的命令行资源可以显著提高您的工作效率,并促使您朝着 UNIX 命令行高手的方向前进!

推荐阅读