文章插图
在 linux 命令中,awk 命令常用于处理文本内容 。下面基于实例介绍 awk 命令的常见用法 。
GNU gawkawk 既是一个命令,也是一种程序语言,它可以有不同的实现版本 。
在 Linux 系统中,awk 的实现版本是 GNU gawk 。
在 shell 中执行 awk 命令,实际执行的是 gawk 命令 。如下所示:
$ ls -l /usr/bin/awklrwxrwxrwx 1 root root 212月12019 /usr/bin/awk -> /etc/alternatives/awk$ ls -l /etc/alternatives/awklrwxrwxrwx 1 root root 133月82019 /etc/alternatives/awk -> /usr/bin/gawk$ ls -l /usr/bin/gawk-rwxr-xr-x 1 root root 4415127月32013 /usr/bin/gawk
可以看到,/usr/bin/awk 文件最终链接到 /usr/bin/gawk 文件,/usr/bin/gawk 文件没有再链接到其他文件 。在下面的描述中,如无特别说明,所说的 awk 是指 GNU gawk 。
awk 命令格式查看 man awk 的说明,也是链接到 man gawk 的内容,这个说明比较难懂,不够清晰,可以再参考 GNU gawk 在线帮助手册 https://www.gnu.org/software/gawk/manual/gawk.html 的说明 。
下面引用的内容就出自这个在线帮助手册,其中对 awk 的基本介绍如下:
The basic function of awk is to search files for lines (or other units of text) that contain certain patterns.awk 命令的基本用法说明如下:
When a line matches one of the patterns, awk performs specified actions on that line.
awk continues to process input lines in this way until it reaches the end of the input files.
【Linux技巧:awk 命令简单入门介绍】There are several ways to run an awk program.即,awk 命令在所给文件中查找包含特定模式的行,并对找到的行进行特定处理 。这些特定处理由 program 参数指定 。
If the program is short, it is easiest to include it in the command that runs awk, like this:awk 'program' input-file1 input-file2 …
where program consists of a series of patterns and actions, an awk program looks like this:
pattern { action }
When the program is long, it is usually more convenient to put it in a file and run it with a command like this:
awk -f program-file input-file1 input-file2 …
There are single quotes around program so the shell won’t interpret any awk characters as special shell characters.
The quotes also cause the shell to treat all of program as a single argument for awk, and allow program to be more than one line long.
You can also run awk without any input files. If you type the following command line:
awk 'program'
awk Applies the program to the standard input, which usually means whatever you type on the keyboard.
上面提到,所给的 program 参数要用单引号括起来,避免 shell 对一些特殊字符进行扩展 。
如果没有提供文件名,awk 命令默认会读取标准输入 。
如果没有提供特定模式,默认处理所有行 。
注意:跟在 awk 命令的 program 参数后面的参数会被认为是文件名,即使用引号把参数值括起来也还是当成文件名,不会当成字符串 。
这个命令不能处理命令行参数提供的字符串值,具体举例说明如下:
$ cat testawkThis is a test string.This is another TEST string.$ awk '{print $3}' testawkaanother$ awk '{print $3}' "testawk"aanother$ awk '{print $3}' "This is a test string."awk: fatal: cannot open file `This is a test string.' for reading (No such file or directory)
可以看到,awk '{print $3}' testawk 命令打印出 testawk 文件的第三列内容 。awk '{print $3}' "testawk" 命令也是打印出 testawk 文件的第三列内容 。即使用双引号把 testawk 括起来,也不代表是打印 "testawk" 字符串的第三列 。
而 awk '{print $3}' "This is a test string." 命令会执行报错,提示找不到名为 This is a test string. 的文件,它不会处理 "This is a test string." 这个字符串自身的内容,而是把该字符串当成文件名,要处理对应文件的内容 。
如果确实需要用 awk 命令来处理字符串,可以用管道操作符 | 来连接标准输入 。
例如用 echo 命令打印字符串的值,然后通过管道操作符把这个值传递到 awk 命令的标准输入 。
具体举例如下:
$ echo "This is a test string." | awk '{print $4}'test$ value=https://www.isolves.com/it/rj/czxt/linux/2020-03-27/"This is a new test string."$ echo "$value" | awk '{print $4}'new
可以看到,echo "This is a test string." | awk '{print $4}' 命令通过 echo 先输出字符串的值,再通过管道操作符 | 把这个输出连接到 awk 命令的标准输入,就能对这个字符串进行处理,不会执行报错 。
推荐阅读
- 如何做网络推广?有哪些渠道和方法?互联网老司机分享推广技巧
- 宫灯长寿花养殖方法及养护技巧
- 花茶的泡法技巧,茉莉花茶的泡法
- 干玫瑰花的泡法,玫瑰花茶泡法技巧
- 红枝蒲桃养殖方法及养护技巧
- 红鸟蕉养殖方法及养护技巧
- 总结的非常详细 深入理解linux系统的目录结构
- 在线yum安装 Linux中安装MySQL数据库下
- linux常识普及,与基础命令表
- Linux设备树语法详解