PageAdmin网站内容管理系统(CMS)交流论坛

注册

 

QQ登录

只需一步,快速开始

发新话题 回复该主题

Linux中的awk命令语法及使用指南 [复制链接]

1#
awk在Linux中用于文本处理任务,可以直接在终端中使用awk命令从文本文件中提取数据、扫描模式以及执行一些操作,例如格式化文本。awk命令也是一种脚本语言,可以用于编写成熟的程序。本文将重点介绍我们可以在终端中使用awk执行哪些操作。
对此类内容感兴趣的伙伴可以看看《Linux命令大全手册》,详细为大家介绍了Linux中的各种命令及使用方法。
一、Linux中的awk命令语法
Linux中的awk命令的核心用法需要两种输入:一个文本文件和一组指令。
awk '{ action }' filename.txt
action:对应于要对文本文件执行的作。
filename:文本文件。
在最基本的层面上,awk命令语法非常简单,只需要一个要与之交互的文本文件和一个要执行的操作。
1、选项和语法变体
我们可以通过添加选项来进一步扩展基本awk命令:
-F:定义字段分隔符。
-v:定义变量。
-f:从文件中读取脚本。
由于awk将空格(空格或制表符)视为文件或输入中字段之间的默认分隔符,因此-F会告诉它如何根据分隔符解释每行中的列或字段。换句话说,当你使用-F时,awk会将每一行拆分为多个部分(字段)。
可以使用-F作为命令行参数,将冒号定义为字段分隔符:
  1. awk -F':' '/house/ { print "ID:", $1, "- Type:", $2, "- Location:", $3 }' filename.txt
复制代码
awk标识分隔符并相应地解释字段:
  1. ID: 1 - Type: Big house - Location: New YorkID: 2 - Type: Small house - Location: Los AngelesID: 4 - Type: Houseboat - Location: Seattle
复制代码
要从命令行分配变量,可以运行:
  1. awk -v word="house" '$0 ~ word { print $0 }' filename.txt
复制代码
Word现在是可在作中使用的变量。
最后,-f选项对于在单个脚本中从命令行一次运行多个awk命令时可以发挥很大作用。假设有一个文件simple_script.awk,其中包含以下内容:
  1. # Print the line number and the line content if the line contains the word "house"$0 ~ /house/ { print NR, $0 }# Print a message before every outputBEGIN { print "Starting to search for 'house'..." }
复制代码
使用以下命令运行:
  1. awk -f simple_script.awk filename.txt
复制代码
将获得:
  1. Starting to search for 'house'...1:Big house:New York2:Small house:Los Angeles4:Houseboat:Seattle
复制代码
2、创建示例文件
对于此示例,我们将使用houses和locations作为示例,创建一个全新的input文件。
使用touch命令创建一个新文件:
  1. touch houses.txt
复制代码
可以使用首选的文本编辑器(例如nano或vim),也可以直接使用echo附加数据。
  1. echo -e "1:Small house:Vermont:100 sqm\n2:Large house:San Diego:300 sqm\n3:Apartment:New York:70 sqm\n4:Houseboat:London:40 sqm" > houses.txt
复制代码
二、Linux中的awk命令用法示例
1、打印文件的所有行
要打印输入文件中的所有行,请运行以下命令:
  1. awk '{print}' houses.txt
复制代码
将输出以下内容:
  1. 1:Small house:Vermont:100 sqm2:Large house:San Diego:300 sqm3:Apartment:New York:70 sqm4:Houseboat:London:40 sqm
复制代码
2、打印特定列
正如我们看到的,awk使用空格作为分隔符将文本文件的每一行拆分为字段(或列)。使用冒号 (。要打印特定的列需要知道该列在行中的位置。
假设要打印包含每个房屋的平方英尺的列。为此将运行:
  1. awk -F':' '{print $4}' houses.txt
复制代码
结果将是:
  1. 100 sqm300 sqm70 sqm40 sqm
复制代码
这里:
-F':'——告诉awk使用冒号 ( 作为字段分隔符;
$4——打印第四个字段(平方英尺)。
3、显示与模式匹配的线条
假设我们只对输入文件中包含特定单词或与特定模式匹配的行感兴趣。为此需要使用 regex。Regex是一种模式匹配技术,可用于创建复杂的模式以提取文本中非常特定的部分。这里将使用一个非常简单的正则表达式。
如果要从输入文件中打印包含单词 “Houseboat” 的整行,将运行:
  1. awk -F ':' '/Houseboat/ {print}' houses.txt
复制代码
输出内容如下:
  1. 4:Houseboat:London:40 sqm
复制代码
其中/Houseboat/是正则表达式模式,用来告诉系统查找单词 “Houseboat” 的所有匹配文本。
分享 转发
TOP
发新话题 回复该主题