awk 自身可以用 awk '{print > "路径文件名"}'
的方式实现重定向, ( "路径文件名"要加引号 , 本文件夹可不加引号)
也可以用shell本身的 awk {print} > 文件名
实现重定向
awk是一种编程语言(语法), 有多种实现 : gawk , mawk , nawk 等
Ubuntu22.04桌面版和服务器版默认的awk并不相同
桌面版默认用的是mawk, 没有安装gawk
服务器版默认用的是gawk , 同时也安装了mawk
分别试验两种重定向方式在各版中的效果
创建一个测试文件夹
sudo mkdir -p /test/AwkTest
进入文件
cd /test/AwkTest
创建并进入文件
sudo mkdir -p /test/AwkTest ; cd $_
创建一个源文件
echo '$_表示最后一个参数' > src.txt
测试1
sudo awk {print} src.txt > t01.txt ; cat t01.txt
测试2
echo awk,gawk,mawk,nawk | sudo awk {print} > t01.txt ; cat t01.txt
3
sudo awk '{print > "t01.txt"}' src.txt ; cat t01.txt
4
echo awk,gawk,mawk,nawk | sudo awk '{print > "t01.txt"}' ; cat t01.txt
5
man awk | sudo awk '{print > "t01.txt"}' ; cat t01.txt
6
info awk | sudo awk {print} > t01.txt ; cat t01.txt
7
man mkdir | sudo awk {print} > t01.txt ; cat t01.txt
上面的测试在Ubunt20.04Server版测试正常
在Ubuntu22.04Desktop版测试正常
man awk 的手册很大, 也正常输出了
不能用 awk --help , 因为有些系统用的是 mawk , 比如 Ubuntu桌面版, mawk查看帮助使用 mawk -W help
#!/bin/bash
sudo mkdir -p /test/AwkTest ; cd $_
echo '$_表示最后一个参数' > src.txt
grep --help > src2.txt
sed --help > src3.txt
sudo awk {print} src.txt > t01.txt ; cat t01.txt
echo awk,gawk,mawk,nawk | sudo awk {print} > t01.txt ; cat t01.txt
sudo awk '{print > "t01.txt"}' src.txt ; cat t01.txt
echo awk,gawk,mawk,nawk | sudo awk '{print > "t01.txt"}' ; cat t01.txt
awk | sudo awk '{print > "t01.txt"}' ; cat t01.txt
sed | sudo awk {print} > t01.txt ; cat t01.txt
grep | sudo awk {print} > t01.txt ; cat t01.txt
sudo awk {print} src2.txt > t01.txt ; cat t01.txt
sudo awk '{print > "t01.txt"}' src3.txt ; cat t01.txt
Ubuntu桌面版22.04默认不带gawk,带mawk
Ubuntu桌面版22.04带gawk和mawk
简介:
AWK是一种解释性编程语言,主要用于文本处理。之所以叫AWK是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan 的 Family Name 的首字符。
GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为GNU AWK。
AWK的几个实现:
当前使用的AWK有三个主要版本,并且它们都符合POSIX标准(至少对于绝大多数用例而言,足够接近)。
第一个是经典awk,它是 Aho,Weinberger , Kernighan (3个人) 在他们的《 AWK编程语言》一书中描述的AWK版本。有时称为 “新AWK”(nawk
)或 “一个真正的AWK”,现在托管在GitHub上。这是许多基于BSD的系统(包括macOS)上预先安装的版本(尽管macOS随附的版本已过时,需要升级)。
第二个是GNU Awk(gawk
),它是迄今为止功能最强大,维护最活跃的版本。Gawk通常预先安装在Linux系统上,并且通常是默认的awk。使用Homebrew可以很容易地在macOS上安装,Gawk还提供Windows二进制文件。自1994年以来,Arnold Robbins一直是gawk的主要维护者,并继续推广该语言(他还为经典的awk版本做出了许多修复)。Gawk具有awk或POSIX标准中未提供的许多功能,包括新函数,联网功能,C扩展API,事件探查器和调试器以及最近的名称空间。
第三个通用版本是mawk
,由Michael Brennan编写。它是Ubuntu和Debian Linux上的默认awk,并且仍然是AWK的最快版本,具有字节码编译器和更节省内存的值表示形式。(从4.0开始,Gawk也使用了字节码编译器,因此它现在已经接近mawk的速度。)
如果你想将AWK用于单行和基本文本处理,则上述任何方法都是不错的选择。如果你打算将其用于较大的脚本或程序,Gawk的功能使其成为明智的选择。
AWK的其他几种实现也具有不同的成熟度和维护级别。值得注意的有这些:嵌入式Linux环境中使用的尺寸优化的BusyBox版本,支持运行时访问Java语言的Java版以及我自己用Go编写的GoAWK(与POSIX兼容的版本)。三个主要的AWK和BusyBox版本都用C编写。
AWK是否仍然有用这个问题,就像在问空气是否有用一样:你可能看不到它,但周围无处不在。许多Linux管理员和DevOps工程师使用它来转换数据或通过日志文件诊断问题。几乎所有基于Unix的计算机上都安装了AWK版本。除了临时使用外,许多大型开源项目还在其构建或文档工具中使用AWK。仅举几个例子:Linux内核在x86工具中使用它来检查 和重新格式化 objdump文件,Neovim使用它来生成文档,而FFmpeg使用它来进行构建和测试。
即使人们不再想看到AWK,AWK构建脚本也很难被杀死:2018年,LWN 写了一篇文章,是关于GCC贡献者想要用Python替换AWK脚本来生成其选项解析代码。这个建议在当时有一些支持,但显然没有人主动要求做实际的移植,现在AWK脚本依然存在。
Robbins在他的2018年论文中主张将AWK(特别是gawk)用作“系统编程语言”,在这种情况下,其含义是用于编写较大的工具和程序的语言。他概述了他认为尚未流行的原因,但Kernighan“ 并非100%确信 ”缺乏扩展机制是AWK不被大型程序广泛使用的主要原因。他建议,这可能是由于缺乏对访问系统调用等内容的内置支持。但是,这些都没有阻止几个人开发更大的工具:Robbins自己编写的TexiWeb Jr.识字编程工具(1300行AWK),Werner Stoop的d.awk工具用于从源码中备注的MarkDown生成文档, Translate Shell是一个6000行AWK工具,可为基于云的翻译API提供相当强大的命令行界面。
过去几年中,有几位开发人员写过关于在其“大数据”工具包中使用AWK的信息,它比重型分布式计算系统(如Spark和Hadoop)简单得多(有时更快)。Nick Strayer 撰写了 有关使用AWK和R解析多个内核中25 TB数据的文章。其他大数据示例包括Adam Drake 写的标题颇为诱人的文章:“命令行工具可以比Hadoop集群快235倍”,以及Brendan O’Connor的“ 不要使用MAWK,AWK是最快,最优雅的大数据处理语言”。
命令行工具可以比Hadoop集群快235倍 ???
总而言之,在临时文本修改,构建工具,“系统编程”和大数据处理之间(更不用说文本模式的第一人称射击游戏),AWK似乎在2020年还活得很好。
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出(即管道)。它支持用户自定义函数和 动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式是这 样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出 (屏幕),即默认处理动作是print;如果没有指定模式,则所有被操作所指定的行都被处理,即默认指定模式是全部。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
像shell一样,awk也有好几种,常见的如awk、nawk、mawk、gawk,其中
awk:最初在1 9 7 7年完成,1 9 8 5年发表了一个新版本的awk,它的功能比旧版本增强了不少,awk 能够用很短的程序对文档里的资料做修改、比较、提取、打印等处理,如果使用C 或P a s c a l 等语言编写程序完成上述的任务会十分不方便而且很花费时间,所写的程序也会很大;
nawk
: 在 20 世纪 80 年代中期,对 awk语言进行了更新,并不同程度地使用一种称为 nawk(new awk) 的增强版本对其进行了替换。许多系统中仍然存在着旧的awk 解释器,但通常将其安装为 oawk (old awk) 命令,而 nawk 解释器则安装为主要的 awk 命令,也可以使用 nawk 命令。Dr. Kernighan 仍然在对 nawk 进行维护,与 gawk 一样,它也是开放源代码的,并且可以免费获得;
mawk
:mawk 是 awk 编程语言的解释器。awk语言在多媒体数据文件以及文本的检索和处理,算法的原型设计和试验都有广泛的使用。mawk带给awk新的概念,它实现了在《The AWK Programming Language》(Aho, Kernighan and Weinberger, The AWK Programming Language, Addison-Wesley Publishing, 1988.被认为是 AWK 手册。)中定义的 awk语言。mawk遵循 POSIX 1003.2 (草案 11.3)定义的 AWK 语言,包含了一些没有在AWK 手册中提到的特色,同时 mawk 提供一小部分扩展,另外据说mawk是实现最快的awk;
gawk
: 是 GNU Project 的awk解释器的开放源代码实现。尽管早期的 GAWK 发行版是旧的 AWK 的替代程序,但不断地对其进行了更新,以包含 NAWK 的特性;
目前,大家都比较倾向于使用awk和gawk。Ubuntu系统中的各种awk的选项设置,可以通过sudo update-alternatives --config awk
来完成,实际上你通过手动修改软链接也能实现。Debian最小化安装的时候awk的链接是指向mawk的。
sudo update-alternatives --config awk
GNU Awk 5.0.0 发布了,Awk(Gawk)是一种编程语言,用于在 Linux/unix 下对文本和数据进行处理。数据可以来自标准输入、文件或其它命令的输出。它支持用户自定义函数和动态正则表达式等功能。
这是一个重要的新版本,带来了一些新功能和功能改进,最大的亮点是实现了命名空间。相比 4.2.1,变化包括: