首页 > 系统相关 >linux三剑客之awk

linux三剑客之awk

时间:2024-04-01 16:30:17浏览次数:26  
标签:文本 文本处理 awk file linux print txt 三剑客

awk 是一个强大的文本处理工具,它特别擅长对文本文件行列筛选。

基本语法:

awk [options] 'pattern { action }' files
  • [options]:awk 的命令行选项,例如 -F 用于指定字段分隔符。
  • pattern:指定一个模式,awk 会根据这个模式来选择哪些行执行动作。如果没有指定模式,awk 会默认对所有行执行动作。
  • { action }:当行匹配模式时执行的动作(一组命令),通常包括打印语句或其他文本处理命令。
  • files:输入文件,如果没有指定文件,则从标准输入(stdin)读取。

常用选项和命令:

  • -F:指定字段分隔符,默认为空白字符(空格或制表符)。

awk -F, '{print $1}' file.csv  # 使用逗号作为字段分隔符
  • BEGIN 和 END:在处理任何行之前(BEGIN)和之后(END)执行的块。

awk 'BEGIN {print "Start Processing"} {print} END {print "End Processing"}' file.txt
  • $1, $2, ...:访问当前记录的字段,$0 表示整行。

awk '{print $1, $3}' file.txt  # 打印每行的第一个和第三个字段
  • NR:当前记录的行号。

awk 'NR > 10 {print}' file.txt  # 打印文件的第11行及之后的行
  • gsub 和 sub:全局和单个字符串替换函数。

awk '{sub(/foo/, "bar"); print}' file.txt  # 将每行中的 "foo" 替换为 "bar"
  • split:将字符串分割为数组。

awk '{split($2, a, ":"); print a[1], a[2]}' file.txt  # 假设 $2 包含 "user:score" 形式的字符串
  • printf:格式化输出。

awk '{printf "Name: %s, Score: %d\n", $1, $3}' scores.txt
  • 条件语句:根据条件执行不同的动作。

awk '{if ($3 > 90) print "High Score:", $0}' file.txt  # 如果第三个字段大于90,则打印整行
  • for 循环和数组操作。

awk '{for (i = 1; i <= NF; i++) print $i}' file.txt  # 打印每行的每个字段
  • 系统命令:在 awk 动作中执行系统命令。

复制
awk '{print $1}' file.txt | sort | uniq -c  # 打印文件中每个唯一字段的数量

awk 的功能非常强大,可以执行复杂的文本处理任务,包括文本分析、数据提取、报告

应用场景

awk 是一个功能丰富的文本处理工具,它在Unix和类Unix系统中被广泛用于文本和数据处理。awk 以其高效的模式扫描和处理能力而著称,适用于各种复杂的文本操作任务。以下是一些典型的 awk 应用场景:

数据提取

从日志文件或数据文件中提取特定字段。例如,从日志中提取访问IP和访问时间:

awk '/Access from/ {print $1, $3}' access.log

报告生成

根据文本文件内容生成格式化的报告。例如,生成用户活动报告:

awk '{print $3, $7}' /var/log/wtmp > activity_report.txt

数据统计

对文本文件中的数据进行统计和汇总。例如,计算某个值的出现次数:

awk '{count[$2]++} END {for (i in count) print i, count[i]}' file.txt

文本替换和转换

在文件中查找并替换文本,或将文本从一种格式转换为另一种格式。例如,将所有逗号分隔的值转换为制表符分隔:

awk -F, '{for(i=1; i<=NF; i++) printf("%s\t", $i); print ""}' file.csv > file.tsv

条件筛选

根据特定条件筛选文本行。例如,筛选出所有大于某个阈值的记录:

awk '$5 > 100' data.txt

数据排序

对文本文件中的数据进行排序。例如,按第二列的数值排序:

awk '{print $2}' file.txt | sort -n

交互式文本处理

在脚本中使用 awk 进行交互式文本处理,如读取用户输入并动态生成输出:

awk 'BEGIN {printf "Enter a number: "} {sum += $1} END {print "Sum: " sum}'

多级数据处理

同时处理多个输入文件,并对它们进行比较、合并或其他操作:

awk -F'\t' 'NR==FNR {a[$1]=$2; next} $1 in a {print $1, a[$1], $2}' file1.txt file2.txt

格式化输出

生成格式化的输出,如添加标题、列宽和边框:

awk 'BEGIN {print "Name", "Score"; print "-----", "-----"} {print $1, $2}' scores.txt

脚本编程

在复杂的脚本中使用 awk 进行文本处理,与其他命令和工具结合使用:

复制
cat file.txt | awk '{print $0}' | sort | uniq -c | sort -nr > sorted_report.txt

工作场景

awk 在日常工作中有许多实用的应用场景,特别是在处理和分析文本数据方面。以下是一些典型的 awk 工作场景:

1. 日志文件分析

分析Web服务器、系统日志或其他日志文件,提取和汇总关键信息,如访问次数、错误类型、用户活动等。

awk '/404/ {count["404"]++} END {for (error in count) print error, count[error]}' access.log

2. 数据报告生成

从原始数据文件中生成格式化的报告,包括列标题、合计行和汇总统计。

awk 'NR>1 {print $1, $2, $3, $4}' data.txt | column -t

3. 配置文件处理

批量修改配置文件中的参数,例如,更新所有用户的配额限制。

awk '$1 == "User" {$2 = "newlimit"} 1' config.txt > new_config.txt

4. 文本数据转换

将数据从一种格式转换为另一种格式,例如,将CSV文件转换为TSV文件。

awk -F, 'NF {for (i=1; i<=NF; i++) printf("%s\t", $i); print ""}' file.csv > file.tsv

5. 数据清洗和预处理

清洗文本数据,移除无用的行或列,或者标准化数据格式。

awk 'NR==1 || $1 !~ /#/ {print}' data.txt  # 移除以#开头的注释行

6. 脚本自动化

在shell脚本中使用awk来自动化复杂的文本处理任务,如日志轮转、数据备份等。

awk '{print $4}' access.log | xargs -I {} mv {} {}.bak

7. 临时更改配置

在不修改原始配置文件的情况下,临时更改配置参数进行测试。

awk '$1 == "MaxClients" {$2 = "500"} 1' httpd.conf > temp.conf && source temp.conf

8. 数据库和CSV文件操作

处理数据库导出的CSV文件,执行数据选择、过滤和聚合操作。

awk -F, '$2 == "success" {sum += $3} END {print sum}' transactions.csv

9. 用户输入处理

在交互式脚本中使用awk来处理用户输入,动态生成报告或执行其他任务。

read -p "Enter a number: " num
awk -v var=$num '$1 ~ var {print $0}' data.txt

10. 系统监控和警报

监控系统日志或性能数据,实时生成警报或通知。

复制
awk '/error/ {print}' /var/log/messages | mail -s "System Alert" [email protected]

标签:文本,文本处理,awk,file,linux,print,txt,三剑客
From: https://blog.csdn.net/m0_63436163/article/details/137237407

相关文章

  • Linux命令
    Linux常用命令mv:移动或改名:移动:文件改变源路径就是移动。[root@localhost~]#cd/data[root@localhostdata]#ls23aaall.tar.gzbbcccls.tar.gz[root@localhostdata]#cdaa[root@localhostaa]#[root@localhost~]#cd/data[root@localhostdata]#ls......
  • Linux常用(3)
    cat效果:显示文件内容cat选项文件名-n显示行号包括空行-A显示隐藏字符-b跳过空白行编号-s将所有的连续的空行替换成位一个空行示例:tac效果:逆向显示文本内容示例:more/less分页显示more[选项]文件名空格下一行到文末后自动退出b上一行enter一行......
  • Veritas NetBackup 10.4 (Unix, Linux, Windows) - 领先的企业备份解决方案
    VeritasNetBackup10.4(Unix,Linux,Windows)-领先的企业备份解决方案The#1enterprisebackupandrecoverysolution.请访问原文链接:https://sysin.org/blog/veritas-netbackup-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org备份和恢复软件解决方案领......
  • Nexpose v6.6.244 for Linux & Windows - 漏洞扫描
    Nexposev6.6.244forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseMar27,2024请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • linux 中 实现计算一列数据的和
     001、awk[root@pc1test01]#lsa.txt[root@pc1test01]#cata.txt8325[root@pc1test01]#awk'{sum+=$1}END{printsum}'a.txt##awk计算第一列数据的和18 002、paste+bc实现[root@pc1test01]#lsa.txt[root@pc1test01]#cata.txt......
  • Pod安全上下文与Linux Capabilities浅析
    目录前言一、Pod安全上下文介绍二、使用方法与应用场景2.1以普通用户运行容器2.2限制特权容器的使用2.3设置文件系统只读三、LinuxCapabilities概念使用方式使用示例四、总结前言        在云原生时代,Kubernetes已经成为容器编排的事实标准,提供了强......
  • Linux基础命令篇之——压缩与解压(tar、gzip、bzip2、zip和unzip)
    linux基础命令——解压与压缩以下是关于Linux命令tar、gzip、bzip2、zip和unzip的详细介绍:1.tar这个是Linux用的最多的解压缩命令tar是Linux系统中用于创建和处理归档文件的命令。归档文件是一个包含多个文件和/或目录的单一文件。常与压缩命令gzip或bzip2结合使用,以减......
  • 深入解析:Linux目录结构及其功能详解
    Linux目录结构是Linux操作系统中的核心组成部分,它承载着整个系统的文件和资源。本文将带领读者深入解析Linux的目录结构,详细介绍各个目录的功能与用途,帮助读者更好地理解和使用Linux系统。从根目录“/”开始,我们将逐一探讨各个子目录,如“/bin”、“/etc”、“/home”等,揭示......
  • Debian (Ubuntu, Debian GNU/Linux)
    Debian(Ubuntu,DebianGNU/Linux) 1.VerifySystemRequirementsVerifythatyourenvironmentmeetsthesystemrequirementsincludingJavaversionforAstah.Chooseyouredition.AstahProfessionalAstahUML2.Download&InstallJavaIns......
  • Windows和Linux系统下的Conda环境迁移
    Motivation​ 大家在学习Python的过程中,可能经常会遇到下面两种情况:同一份代码,别人配置conda环境可以跑通,但你配置了N天,还不知道哪一步出现了差错,仍然跑不通代码,conda环境卸载了又重新下,出现了死循环......你可能先在一台服务器上跑通了代码,为了提高效率,你又想在其它服务器上......