awk命令是处理或分析文本文件(尤其是按行和列组织的数据文件)的强大方法.
您可以从命令行运行简单的awk命令. 应该将更复杂的任务作为awk程序(所谓的awk脚本)写入文件.
awk命令的基本格式如下:
awk'pattern {action}'输入文件>输出文件
这意味着: 占用输入文件的每一行;如果该行包含模式,则对该行应用操作,然后将结果行写入输出文件. 如果省略此模式,则该操作将应用于所有行. 例如:
linuxidc @ Ubuntu: 〜/ linuxidc.com $ awk'{打印$ 5}'linuxidc.txt> linuxmi.txt
此语句获取每行第五列中的元素,并将它们作为一行写入输出文件“ output.txt”. 变量“ $ 4”指的是第四列. 同样,您可以使用$ 1,$ 2,$ 3等访问第一,第二和第三列. 默认情况下,假定列由空格或制表符(所谓的空格)分隔. 因此,如果输入文件“ linuxidc.txt”包含以下行:
1,linuxidc com,Title 599,价格$ 9.30
2,ninhao linuxidc,标题761,价格为5.90美元
3,naike xie,第880名,价格9.10美元
4,Lady Gaga,标题198,价格1.30美元
5,约翰尼·卡什(Johnny Cash),标题582,价格$ 6.50
6,Elvis Presley,Title 370,价格$ 9.30
7,约翰·列侬(John Lennon),标题571,价格$ 8.90
8,迈克尔·杰克逊(Michael Jackson),标题673,价格7.50美元
9,linuxidc com,Title 585,价格$ 1.80
然后,该命令将以下行写入输出文件“ linuxmi.txt”:
linuxidc @ ubuntu: 〜/ linuxidc.com $ cat linuxmi.txt
599,
761,
880,
198,
582,
370,
571,
673,
585,
如果列分隔符不是空格或制表符(例如逗号),则可以在awk语句中如下指定:
linuxidc @ ubuntu: 〜/ linuxidc.com $ awk -Fawk脚本,'{print $ 3}'linuxidc.txt> linuxmi.txt
如果认为各列之间用逗号分隔,则将从每行的第三列中选择元素. 因此,在这种情况下,输出将是:
linuxidc @ ubuntu: 〜/ linuxidc.com $ cat linuxmi.txt
599标题
761标题
标题880
标题198
标题582
标题370
标题571
标题673
标题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”,则系统将在该行的第三列中打印该元素. 上例中的输出为:
linuxidc @ ubuntu: 〜/ linuxidc.com $ awk'/ 30 / {print $ 3}'linuxidc.txt
com
Gagaawk脚本,
普雷斯利,
如果表元素是数字,则awk可以对它们运行计算,如以下示例所示:
linuxidc @ ubuntu: 〜/ linuxidc.com $ awk'{print($ 2 * $ 3)+ $ 7}'linuxidc.com.txt
除了访问当前行元素的变量($ 1,$ 2等)之外,整行(行)还具有变量$ 0,而字段数则具有变量NF.
您还可以在此示例中定义新变量:
linuxidc @ ubuntu: 〜/ linuxidc.com $ awk'{sum = 0;为(col = 1; col
这将计算并打印每行中所有元素的总和.
awk语句通常与sed命令结合使用.
有关Linux命令的更多信息,请参考Linux Command Collection的特殊页面
Linux公社的RSS地址:
本文将永久更新链接地址:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-287526-1.html