【嵌入式开发 Linux 常用命令系列 7.2 -- awk 找到空格并插入字符】

文章目录

    • [awk 列字符处理](#awk 列字符处理)
    • [awk gsub 学习](#awk gsub 学习)

awk 列字符处理

在工作中经常需要需要复制PDF文件表格中的数据,但是复制完成后,就不会以表格的形式存在了。所以想能不能使用linux 脚本或者命令来将复制的内容重新做成表格,比如做成 CSDN markdown 识别的表格。这个时候就可以使用 awk 命令来完成这个工作了。

如下内容是从PDF拷贝过来的内容(ARM 的寄存器表):

css 复制代码
Number Offset Name Access Width Type Description
0 0x000 - - - - Reserved
1 0x004 TRCPRGCTLR RW 32 Trace Programming Control Register
2 0x008 TRCPROCSELR RW 32 Trace PE Select Control Register
3 0x00C TRCSTATR RO 32 Trace Trace Status Register
4 0x010 TRCCONFIGR RW 32 Trace Trace Configuration Register
5 0x014 - - - - Reserved
6 0x018 TRCAUXCTLR RW 32 Trace Auxiliary Control Register
7 0x01C - - - Trace Reserved
8 0x020 TRCEVENTCTL0R RW 32 Trace Event Control 0 Register
9 0x024 TRCEVENTCTL1R RW 32 Trace Event Control 1 Register
10 0x028 - - - - Reserved
11 0x02C TRCSTALLCTLR RW 32 Trace Stall Control Register
12 0x030 TRCTSCTLR RW 32 Trace Global Timestamp Control Register
13 0x034 TRCSYNCPR RWa 32 Trace Synchronization Period Register
14 0x038 TRCCCCTLR RW 32 Trace Cycle Count Control Register
15 0x03C TRCBBCTLR RW 32 Trace Branch Broadcast Control Register
16 0x040 TRCTRACEIDR RW 32 Trace Trace ID Register
17 0x044 TRCQCTLR RW 32 Trace Q Element Control Register
18-31 0x048-0x07C - - - - Reserved
32 0x080 TRCVICTLR RW 32 Trace ViewInst Main Control Register
33 0x084 TRCVIIECTLR RW 32 Trace ViewInst Include/Exclude Control
Register
34 0x088 TRCVISSCTLR RW 32 Trace ViewInst Start/Stop Control Register
35 0x08C TRCVIPCSSCTLR RW 32 Trace ViewInst Start/Stop PE Comparator
Control Register
36-39 0x090-0x09C - - - - Reserved
40 0x0A0 TRCVDCTLR RW 32 Trace ViewData Main Control Register
41 0x0A4 TRCVDSACCTLR RW 32 Trace ViewData Include/Exclude Single
Address Comparator Control Register
42 0x0A8 TRCVDARCCTLR RW 32 Trace ViewData Include/Exclude Address
Range Comparator Control Register
43-63 0x0AC-0x0FC - - - - Reserved

下面是使用 awk 命令简单处理后的效果:

Number Offset Name Access Width Type Description
0 0x000 - - - - Reserved
1 0x004 TRCPRGCTLR RW 32 Trace Programming
2 0x008 TRCPROCSELR RW 32 Trace PE
3 0x00C TRCSTATR RO 32 Trace Trace
4 0x010 TRCCONFIGR RW 32 Trace Trace
5 0x014 - - - - Reserved
6 0x018 TRCAUXCTLR RW 32 Trace Auxiliary
7 0x01C - - - Trace Reserved
8 0x020 TRCEVENTCTL0R RW 32 Trace Event
9 0x024 TRCEVENTCTL1R RW 32 Trace Event
10 0x028 - - - - Reserved
11 0x02C TRCSTALLCTLR RW 32 Trace Stall
12 0x030 TRCTSCTLR RW 32 Trace Global
13 0x034 TRCSYNCPR RWa 32 Trace Synchronization
14 0x038 TRCCCCTLR RW 32 Trace Cycle
15 0x03C TRCBBCTLR RW 32 Trace Branch
16 0x040 TRCTRACEIDR RW 32 Trace Trace
17 0x044 TRCQCTLR RW 32 Trace Q
18-31 0x048-0x07C - - - - Reserved
32 0x080 TRCVICTLR RW 32 Trace ViewInst
33 0x084 TRCVIIECTLR RW 32 Trace ViewInst
Register
34 0x088 TRCVISSCTLR RW 32 Trace ViewInst
35 0x08C TRCVIPCSSCTLR RW 32 Trace ViewInst
Control Register
36-39 0x090-0x09C - - - - Reserved
40 0x0A0 TRCVDCTLR RW 32 Trace ViewData
41 0x0A4 TRCVDSACCTLR RW 32 Trace ViewData
Address Comparator Control Register
42 0x0A8 TRCVDARCCTLR RW 32 Trace ViewData
Range Comparator Control Register
43-63 0x0AC-0x0FC - - - - Reserved

处理命令如下:

powershell 复制代码
awk '{gsub(/ /,"&|"); print}' csdn.txt

这里是命令的解释:

  • awk 是文本处理的命令;
  • gsub(/ /,"&X") 是gsub函数,它查找每个空格(/ /)并用该空格和字符"|"("&|")替换它。"&"代表原始匹配的内容,此处即空格;
  • print 是用来打印每一行;
  • filename 是你要处理的文件名。

这个命令会读取文件中的每一行,并在每个空格后面插入字符"X",然后打印出来。

注意: 处理完成后还需在表头后面加上一行:|-|-|-|-|-|-|-|,这个是 markdown 表格的识别符。

awk gsub 学习

gsub 是awk中的一个函数,用于进行全局替换。其语法格式如下:

powershell 复制代码
gsub(regexp, replacement [, target])
  • regexp 是一个正则表达式,用于匹配你想要替换的内容。
  • replacement 是你想要替换成的内容。
  • target 是一个可选的参数,表示你想要替换的字段。如果省略,那么默认替换整行。

gsub 函数会查找 target 中所有匹配regexp的部分,并用 replacement 进行替换。所有的替换操作在一个字段或整行中都是全局的,也就是说,会替换所有匹配的部分,而不仅仅是第一个。

举个例子,假设我们有一个文件,其中一行是:

kotlin 复制代码
hello world, hello awk, hello gsub

我们想要把所有的"hello"替换成"hi",可以使用下面的命令:

kotlin 复制代码
awk '{gsub(/hello/,"hi"); print}' filename

/hello/ 是一个正则表达式,匹配所有的"hello","hi"是我们想要替换成的内容。

运行上面的命令后,输出将会是:

kotlin 复制代码
hi world, hi awk, hi gsub

可以看到,所有的"hello"都被"hi"替换了。

相关推荐
无足鸟ICT8 分钟前
【RHCA+】who命令(查看已登陆用户)
linux·运维·服务器
Escalating_xu15 分钟前
【Linux 网络编程】应用层协议 HTTP(下):Header、连接管理与 C++ HTTP 服务器
linux·服务器·网络
RacentCLM20 分钟前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
注塑机数据采集联网1 小时前
注塑机生产管控MES系统应用
大数据·运维·服务器·人工智能·物联网
海宇服务1 小时前
零信任架构实战:基于海宇全国车辆配置查验构建自动化二手商用车出厂参数建档网关
运维·人工智能·架构·自动化·1024程序员节
GeW3 小时前
新质生产力路线图落地,Linux运维与数据库架构师的机会清单
linux
Brilliantwxx3 小时前
【Linux】 文件访问与路径解析:目录、文件名、dentry、路径缓冲与 dcache 全解析
linux·运维·服务器·开发语言·spring
见闻小天地3 小时前
新手入门:印刷包装设备的伺服和PLC运动控制方案各管什么?七步选型讲清楚
运维·网络·数据库·人工智能
father_12273 小时前
Greenplum 集群故障恢复与主备同步机制实战
linux·网络·greenplum