Linux 技术手札

字串处理工具: Awk

AWK 的名字由来是三位作者的姓氏 — “Aho, Weinberger 及 Kernighan”, AWK 是一种专门处理文字的直译语言。AWK 会把档案逐行读入, 并默认以空格作为分隔符号, 将一行字串分割成不同字段, 第一个字段用 $1 表示, 第二个用 $2, 如此类推, 而 $0 则表示整行资料, 这样可以更好的分析处理。

除了对档案进行分析外, 跟其他 Linux 工具一样, awk 同样可以读取管线输入。

不论在指令模式或者撰写 Shell Script 时, awk 也十分有用,以下是 Awk 的使用例子:

# awk ‘{ print }’ /etc/passwd

以上指令将 /etc/passwd 作为 awk 的输入档案,并会将 /etc/passwd 档案的内容逐行输出。但这样使用 awk 看不出它的作用,以下是另一个例子:

# awk -F”:” ‘{ print $1 }’ /etc/passwd

以上例子使用 awk 时加入了 -F 选项,并指定每一行用 “:” 作为分隔字串。而 print $1 的意思是印出分隔后的第一组字串。输出结果是系统所有帐号的使用者名称。

如果将 awk 用管线 (pipe) 和其他指令配合的话,作用会更加大,例如用 “ls -l /etc” 的话,会将/etc 的内容及其他档案/目录资料印出,但我不想看建立日期及档案体积等资讯,只要看档案/目录及其权限,可以这样做:

# ls -l /etc | awk ‘{print $1 “t” $9}’

因为 awk 默认会用 tab 或空白字串作为分隔,所以今次不用 -F 选择。以上会将 “ls -l /etc” 的输出作为 awk 的输入内容,而会印出分隔后第一及第九组字串,两个字串中间会用 “t” 分开。

Exit mobile version