千家信息网

awk命令和脚本的编写启蒙

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,awk的 命令是一种处理或分析文本文件的强大方法,特别是按行和列组织的数据文件。可以从 命令行运行简单的awk命令。更复杂的任务应该作为awk程序(所谓的awk 脚本)写入文件。awk命令的基本格式如
千家信息网最后更新 2026年11月02日awk命令和脚本的编写启蒙
awk的 命令是一种处理或分析文本文件的强大方法,特别是按行和列组织的数据文件。可以从 命令行运行简单的awk命令。更复杂的任务应该作为awk程序(所谓的awk 脚本)写入文件。

awk命令的基本格式如下:

awk 'pattern {action}' input-file > output-file

这意味着:取输入文件的每一行; 如果该行包含该模式,则将该操作应用于该行并将结果行写入输出文件。 如果省略该模式,则该操作将应用于所有行。 例如:

linuxidc@Ubuntu:~/linuxidc.com$ awk '{ print $5 }' linuxidc.txt > linuxmi.txt

该语句获取每行第5列的元素,并将其作为一行写入输出文件"output.txt"中。 变量'$4'指的是第四列。 类似地,您可以使用$1,$2,$3等访问第一列,第二列和第三列。默认情况下,假定列由空格或制表符(所谓的空格)分隔。 因此,如果输入文件"linuxidc.txt"包含以下行:

  • 1, linuxidc com, Title 599, Price $9.30

  • 2, ninhao linuxidc, Title 761, Price $5.90

  • 3, naike xie, Title 880, Price $9.10

  • 4, Lady Gaga, Title 198, Price $1.30

  • 5, Johnny Cash, Title 582, Price $6.50

  • 6, Elvis Presley, Title 370, Price $9.30

  • 7, John Lennon, Title 571, Price $8.90

  • 8, Michael Jackson, Title 673, Price $7.50

  • 9, linuxidc com, Title 585, Price $1.80

然后该命令将以下行写入输出文件"linuxmi.txt":

linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt599,761,880,198,582,370,571,673,585,

如果列分隔符不是空格或制表符(例如逗号),则可以在awk语句中指定,如下所示:

linuxidc@ubuntu:~/linuxidc.com$ awk -F, '{ print $3 }' linuxidc.txt > linuxmi.txt

如果认为列被逗号分隔,这将从每行的第3列中选择元素。 因此,在这种情况下,输出将是:

linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt Title 599 Title 761 Title 880 Title 198 Title 582 Title 370 Title 571 Title 673 Title 585

大括号内的语句列表('{','}')称为块。 如果将条件表达式放在块前面,则只有条件为真时才会执行块内的语句。

awk '$7=="\$7.30" { print $3 }' linuxidc.txt

在这种情况下,条件是$7=="\$7.30",这意味着第7列的元素等于$7.30。 美元符号前面的反斜杠用于阻止系统将$7解释为变量,而是从字面上理解美元符号。

因此,这个awk语句打印出每行第3列的元素,第7列的"$7.30"。

您还可以使用正则表达式作为条件。 例如:

linuxidc@ubuntu:~/linuxidc.com$ awk '$7=="\$7.30" { print $3 }' linuxidc.txt

两个斜杠('/')之间的字符串是正则表达式。 在这种情况下,它只是字符串"30"。 这意味着如果一行包含字符串"30",系统将在该行的第3列打印出该元素。 上例中的输出将是:

linuxidc@ubuntu:~/linuxidc.com$ awk '/30/ { print $3 }' linuxidc.txtcom,Gaga,Presley,

如果表元素是数字,awk可以在它们上运行计算,如下例所示:

linuxidc@ubuntu:~/linuxidc.com$ awk '{ print ($2 * $3) + $7 }' linuxidc.com.txt

除了访问当前行元素($1,$2等)的变量之外,还有变量$0表示完整行(行),变量NF表示字段数。

您还可以在此示例中定义新变量:

linuxidc@ubuntu:~/linuxidc.com$ awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }' linuxidc.com.txt

这将计算并打印每行所有元素的总和。

awk语句经常与sed命令结合使用。

原文来自: https://www.linuxprobe.com/awk-command-script.html

元素 文件 命令 变量 语句 输出 情况 条件 一行 字符 字符串 意味 空格 表达式 制表符 斜杠 模式 正则 符号 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 上海卓越科技互联网 中国互联网科技工作委员会毛军 礼当家互联网科技 融贸通互联网科技 中国互联网金融科技基金 盛创互联网科技有限公司 深圳互联网科技怎么样 北京华百购互联网科技有限公司 银川新华互联网科技职业技术培训学校图片 阿里互联网科技公司 移动互联网年度科技创新 开一家科技互联网公司需要多少钱 健康食品互联网创新科技园项目 中和天地互联网科技有限公司 半导体是互联网高科技吗 版纳互联网科技选哪家 科技信息时代互联网发展 盐城市攀科互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 金融科技还是互联网 重庆互联网络科技 壹账通互联网科技 新浪科技互联网 成都狮子座互联网科技 海南科技产业互联网平台 互联网科技产品 以后互联网后是啥科技 互联网新科技动漫ppt素材 众联互联网络科技
0