awk 简单使用教程(一)

简介: awk 简单使用教程(一)

awk是Linux环境下重要的结构化文本处理工具,非常便捷好用。

之前我一直使用 Python 来处理 Linux 的一些文本,但是对于一些大文本的简单处理,Python 麻烦而且慢,于是现在慢慢改用awk来处理,很多时候一行命令就能解决,因此非常方便。针对使用是过程的一些心得,写个小小的教程,awk太强大了,需要慢慢长时间的学习,我尽量保持更新这个教程吧。


awk基本概念


awk是基于列的处理工具,它的工作方式是按行读取文本并视为一条记录,每条记录以字段分割成若干字段,然后输出各字段的值。awk认为文件都是结构化的,也就是说都是由单词和各种空白字符组成的,“空白字符”包括空格、tab、连续的空格和tab等,因此awk特别适合用于csv文件的处理。


域(字段)


  • awk中每个非空白的部分叫做域(或者字段),从左到右依次是第一个域,第二个域。1,1,12表示第一域第二个域,$0表示全部域,也就是整行。
  • 打印第一个和第四个列:awk '{print $1,$4}' awk.txt
  • 打印全部内容:awk '{print $0}' awk.txt
  • $NF表示最后一列,$(NF-1)倒数第二列,依次类推
  • 打印最后一列:awk '{print $NF}' awk.txt

分割符


作为csv文件处理工具,分隔符对于awk非常重要,根据输入和输出、域间和行间,共有4个分隔符变量:

分割域 分割行
输入 FS RS
输出 OFS ORS

  • RS和ORS默认是换行(’\n’)
  • FS和OFS默认是空白符

这地方要注意,我们常用-F来制定输入的域分隔符,却忘记了制定输出的域分隔符,而导致经常是输入是TAB分割,保存后的文本变成了空白符分割。

通过为输入的分隔符变量制定相应分割方式,来更好的处理文本,而输出的分隔符变量则可以让我们在保存处理后的数据时更加灵活。


awk -F "\t" '{OFS="\t"} {if ($4==3) $4=5}1' test.txt


上述命令指定输入分隔符为TAB,如果第4个字段为3,则将其替换为5,然后打印出来({}后跟1表示打印),打印的域分隔符为TAB

目录
相关文章
Windows 命令提示符(CMD)操作(七):扩展命令和功能
Windows 命令提示符(CMD)操作(七):扩展命令和功能
Mgo
|
存储 SQL Kubernetes
可观测性革命 - 揭秘OpenObserve开源高性能云原生平台
本文分析OpenObserve 以及其在可观测性方面如何帮助您构建更好的软件并节省观测成本
Mgo
1850 0
|
机器学习/深度学习 编解码 计算机视觉
YOLOv8改进 | 主干篇 | SwinTransformer替换Backbone(附代码 + 详细修改步骤 +原理介绍)
YOLOv8改进 | 主干篇 | SwinTransformer替换Backbone(附代码 + 详细修改步骤 +原理介绍)
1366 0
|
NoSQL 算法 Redis
使用Docker-Compose搭建高可用redis哨兵集群
出于学习目的,您可以很轻松地在docker环境下运行redis的单个实例,但是如果您需要在生产环境中运行它,那么必须将Redis部署为HA(High Avaliable)模式。
使用Docker-Compose搭建高可用redis哨兵集群
|
存储 JSON 数据库
Python中列表数据的保存与读取:以txt文件为例
Python中列表数据的保存与读取:以txt文件为例
490 2
|
Kubernetes 算法 调度
【K8S系列】深入解析K8S调度
【K8S系列】深入解析K8S调度
1879 0
|
Java Linux
【网络】高并发场景处理:线程池和IO多路复用
【网络】高并发场景处理:线程池和IO多路复用
296 2
|
安全 Java 程序员
线程安全与 Vector 类的分析
【8月更文挑战第22天】
234 4
|
数据采集 人工智能 算法
你要牢记的四个常用AI提示词框架:ICIO、CRISPE、BROKE、RASCEF,有助于获取更加稳定和高质量的内容
你要牢记的四个常用AI提示词框架:ICIO、CRISPE、BROKE、RASCEF,有助于获取更加稳定和高质量的内容
|
Kubernetes 容灾 调度
k8s教程(pod篇)-调度总结(三)
k8s教程(pod篇)-调度总结(三)
409 0