echo "$value" | awk '{print $4}' 命令打印出 value 变量值的第四列内容,可以用这个方式来对变量值进行处理 。
注意:这里使用管道操作符 | 来连接标准输入,让 awk 命令能够处理传入到标准输入的字符串,但是使用重定向标准输入操作符 < 并不能让 awk 命令处理字符串 。
重定向是基于文件的操作,所给的字符串会被当成文件名,举例如下:
$ awk '{print $4}' < "This is a test string."-bash: This is a test string.: No such file or directory
可以看到,在重定向标准输入操作符 < 右边的 "This is a test string." 字符串被当成文件名,bash 提示找不到文件 。
这里不是 awk 命令报错,而是 bash 在处理重定向的时候报错 。
awk program使用 awk 命令的关键在于,program 参数要怎么写 。
查看 GNU gawk 在线帮助手册的说明,列举部分内容如下:
- Programs in awk consist of pattern–action pairs.
- An action without a pattern always runs.
- An awk program generally looks like this: [pattern] { action }
- Patterns in awk control the execution of rules -- a rule is executed when its pattern matches the current input record.
- The purpose of the action is to tell awk what to do once a match for the pattern is found.
- An action consists of one or more awk statements, enclosed in braces (‘{…}’).
部分 pattern 参数的写法说明如下:
- /regular expression/
A regular expression. It matches when the text of the input record fits the regular expression. - expression
A single expression. It matches when its value is nonzero (if a number) or non-null (if a string).
$ awk '/a.*/ {print $0}' testawkThis is a test string.This is another TEST string.$ awk '/test/ {print $0}' testawkThis is a test string.$ awk 'test {print $0}' testawk$ awk '"NONE" {print $0}' testawkThis is a test string.This is another TEST string.$ awk '$3 == "another" {print $0}' testawkThis is another TEST string.
可以看到,awk '/a.*/ {print $0}' testawk 命令使用 a.* 正则表达式来匹配包含字符 ‘a’ 的行,然后打印出整行内容 。awk '/test/ {print $0}' testawk 命令则是打印包含 "test" 字符串的行 。
awk 'test {print $0}' testawk 命令什么都没有打印,这种写法并不表示打印包含 "test" 字符串的行 。
awk '"NONE" {print $0}' testawk 命令打印出 testawk 文件的所有行,虽然这个文件并没有包含 "NONE" 字符串 。基于上面说明,所给的 pattern 参数是一个用双引号括起来的非空字符串,表示总是匹配,不管这个字符串的内容是什么 。
awk '$3 == "another" {print $0}' testawk 命令匹配第三列内容为 "another" 字符串的行,并打印出整行内容 。
即,如果要指定匹配某个字符串,pattern 参数写为 “/regular expression/” 的形式会比较简单,要写为 “expression” 形式,需要了解 awk 的表达式写法 。
获取所给行的内容awk 在读取每行内容时,会基于分割字符把行内容拆分成多个单词,可以用 $number 来获取第 number 列的单词,number 值从 1 开始 。例如,$1 对应第一列的单词,$2 对应第二列的单词,$3 对应第三列的单词,依此类推 。可以用 $NF 来获取拆分后的最后一列内容 。
特别的,$0 获取到整行的内容,包括行首、或者行末的任意空白字符 。
以 "This is a test string." 这一行进行举例,有如下的对应关系:
文章插图
awk行字段获取方法
使用 -F 选项指定分割字符前面提到,awk 默认使用空格来拆分行内容为多个单词 。如果想要基于其他字符来进行拆分,可以使用 -F 选项来指定分割字符 。
GNU gawk 在线帮助手册对 -F 选项说明如下:
-F fs例如对 "clang/utils/analyzer/" 这样的目录路径来说,如果想要基于 / 进行拆分,以便获取各个目录名,就可以使用 -F 选项来指定分割字符为 / 。
--field-separator fs
Set the FS variable to fs.
推荐阅读
- 如何做网络推广?有哪些渠道和方法?互联网老司机分享推广技巧
- 宫灯长寿花养殖方法及养护技巧
- 花茶的泡法技巧,茉莉花茶的泡法
- 干玫瑰花的泡法,玫瑰花茶泡法技巧
- 红枝蒲桃养殖方法及养护技巧
- 红鸟蕉养殖方法及养护技巧
- 总结的非常详细 深入理解linux系统的目录结构
- 在线yum安装 Linux中安装MySQL数据库下
- linux常识普及,与基础命令表
- Linux设备树语法详解