Linux 中 awk 与 sed 操作

2023-11-12

4、awk之文本操作运算

awk是一种操作数据流的行和列的工具,也是一种编程语言。awk有很多内建的功能,比如数组、函数等,这和C语言有相同之处。

sudo apt-get install gawk   #
awk 'BEGIN{print "start"}   
pattern{print "do something"}
END{print "end"}'
#BEGIN   变量初始化
#pattern 命令执行
#END     数据流结束后的打印输出等
#三块均可选

1.awk的工作原理:

  • (1)执行BEGIN {commands}语句块中的语句。
  • (2)从文件或stdin中读取一行,然后执行pattern {commands}。重复此过程,直到文件全部被读取完毕。
  • (3)当读至输入流末尾时,执行END {commands}语句块。
#例子
echo -e "a\nb\nc" | awk 'BEGIN{i=0}{i++}END{print i}'
#输出:3

2.awk中的特殊变量:

  • NR 表示记录数量(number of records),执行过程中对应于当前行号
  • NF表示字段数量(number of fields),在执行过
    程中对应于当前行的字段数
  • $0该变量包含执行过程中当前行的文本内容
  • $1该变量包含第一个字段的文本内容
  • $2该变量包含第二个字段的文本内容

3.awk中的控制语句

#if
{if(expression){
	statement;...}
else{
	statement;...
}
}
#while
while(expression)
{
	statement;
}

4.数组

echo|awk 'BEGIN{
A["apple"]=2
A["peach"]=3
A["orange"]=4
A["banana"]=5
n=0
}
END{
for(i in A)
	{
		n++
		printf("%d\t%s\t%d\n",n,i,A[i])
	}
}
----------------------
1	banana	5
2	peach	3
3	orange	4
4	apple	2

5.awk与文件

awk '{print $1*2, $2}' data.txt  #将第一个字段乘2
awk -v scale=5 '{print $1*scale, $2}' data.txt  #将第一个字段乘传入的一个参数scale(=5)

5、sed之流编辑器

  • sed(stream editor). sed编辑器通过输入到命令行上的命令或者存储在命令文本文件中的命令来操作数据流中的数据。它每次从输入中读取一行数据, 并用提供的编辑器命令匹配该数据,按命令中指定的操作修改数据,然后将生成的新数据输出到stdout(标准输出)。
  • 注意sed编辑器操作结果一般不改变原文本或原文件的数据。可以使用输出重定向将sed的输出结果保存到文件中。
  • sed 以按顺序逐行的方式工作,过程为:
    – 从输入读取一行数据存入临时缓冲区,此缓冲区称为模式空间( pattern space)
    – 按指定的 sed 编辑命令处理缓冲区中的内容
    – 把模式空间的内容送往屏幕并将这行内容从模式空间中删除
    – 读取下面一行。重复上面的过程直到全部处理结束。
  • sed 的命令格式:sed options script file
    options参数为允许定制sed命令的行为。
options 含义
‐e command 将command添加至处理输入时运行的命令中
‐f command_file 将command_file中的命令集添加至处理输入时运行的命令中
‐n 不要为每条命令产生输出,但会等待打印命令

script参数指定了在数据流上的单条命令。如果需要不止一条命令,就需要采用‐e选项在命令行上指定它们,或者采用‐f选项在一个单独文件中指定它们。

  • sed替换命令格式:
    sed 's/pattern/replacement/flags'
    • pattern是要被替换的文本
    • replacement是要插到数据流中的新文本
    • flags参数控制替换如何进行。替换标记如下:
    g 表明所有该文本出现的地方都应该被替换
    p 表明原来行中的内容应该被打印出来
  • sed 插入命令
sed '[address]command\
new line'

command为i(insert)或者a(append)。 new line必须在单独一行。

echo -e "dog \ncat \nelephent \ntigger" | sed 1,2d  
#删1、2行,显示大象、老虎
echo -e "dog \ncat \nelephent \ntigger" | sed -n 1,2d  
#啥也不显示
echo -e "dog1 dog2\ncat\nelephent\ntigger"|sed '/dog1/d'  
#删除含有dog1的行
echo -e "dog dog\ncat\nelephent\ndog\ntigger"|sed 's/dog/fox/'  
#将每行第一个dog换成fox
echo -e "dog dog\ncat\nelephent\ndog\ntigger"|sed 's/dog/fox/g'  
#将所有的dog换成fox
echo -e "dog dog\ncat\nelephent\ndog\ntigger"|sed -n 's/dog/fox/'  
#啥也不显示
echo -e "dog dog\ncat\nelephent\ndog\ntigger"|sed -n 's/dog/fox/p'  
#打印了被修改的两行
echo -e "dog dog\ncat\nelephent\ndog\ntigger"|sed '1s/dog/fox/'  
#只对第一行进行替换操作
echo -e "dog dog\na cat is smart\nelephent\ndog\ntiger"|sed '/cat/s/smart/agile/'  
#将含有cat的那一行中的smart 换成 agile
echo -e "dog dog\na cat is smart\nelephent\ndog\ntiger"|sed '/cat/{
s/smart/agile/
s/a/some/
s/is/are/
s/cat/cats/
}'
#多重替换
echo -e "dog dog\ncat fox\nelephent bird\nseal salmon"|sed '2c\
changing the 2nd line'
#修改标准输入的第二行,用changing the 2nd line覆盖第二行
echo -e "dog dog\ncat fox\nelephent bird\nseal salmon"|sed '1,3w animal.txt'
#修改标准输入的第1至3行写入文件 animal.txt
sed '2r student.txt' animal.txt
#将student.txt 的文本插入到animal.txt 文件的第二行开始
#sed一般不会对原文件进行修改
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 中 awk 与 sed 操作 的相关文章

  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 从 ttyUSB0 写入和读取,无法得到响应

    我对 Linux tty 不太有经验 我的环境是带有丰富 USB 串行的 Raspbian 什么有效 stty F dev ttyUSB0 38400 cu l dev ttyUSB0 s 38400 cu to dev ttyUSB0作品
  • 如何用awk删除以“C”开头的行?

    如何使用以下命令从文本文件中删除以 C 开头的行awk 有什么建议请 如果数据在文件中data txt then With awk awk C data txt With grep grep v C data txt 显示开头不带 C 的所
  • 使用非规范地址检索内存数据会导致 SIGSEGV 而不是 SIGBUS

    我无法使用以下汇编代码产生 总线错误 这里我使用的内存地址不是合法的 规范地址 那么 我怎样才能触发该错误呢 我在带有 NASM 2 14 02 的 Ubuntu 20 04 LTS 下运行这段代码 但它会导致负载出现 SIGSEGV 分段
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 如何设置 tmux 在启动时打开指定的窗口?

    如何设置 tmux 使其在启动时打开指定的窗口 您可以编写一个小 shell 脚本来启动 tmux 以及所需的程序 我在一个名为 dev tmux 的 shell 脚本中包含以下内容 开发环境 bin sh tmux new session
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • SVN 提交后挂钩在提交后不会运行

    我的服务器上设置了 SVN 存储库 并且遇到提交后问题 我在 iMac 上使用 SmartSVN 作为客户端 我通过 SmartSVN 的 ssh svn 连接 我能够成功连接到 SVN 并对其进行更改 但从 SVN 客户端提交后 我的提交
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 如何使用 UNIX shell 脚本删除平面文件的页眉和页脚记录?

    我有一个平面文件 如下所示 如何使用 UNIX shell 脚本从文件中删除页眉和页脚并重写同一文件 9 20050427 HEADER RECORD 0000000 00000 000000000 123456 00 654321 DAT

随机推荐

  • Atlas VPN 曝零日漏洞,允许查看用户真实 IP 地址

    Atlas VPN 已确认存在一个零日漏洞 该漏洞允许网站所有者查看 Linux 用户的真实 IP 地址 不久前 发现该漏洞的人在Reddit上公开发布了有关该零日漏洞的详细信息以及漏洞利用代码 关于 Atlas VPN 零日漏洞 Atla
  • stm32固件升级之U盘(四)

    目录 序言 什么是IAP升级 STM32代码启动介绍 IAP设计思路 bootloader设计 stm32内部flash分区 移植U盘底层源码 总结 序言 对于嵌入式软件开发来说 U盘离线更新固件是一种常用的更新手段 本篇文章讲述了如何通过
  • MyBatis核心配置文件详解

    siwuxie095 MyBatis 核心配置文件详解 1 核心配置文件的名称和位置没有固定要求 1 位置 建议在 src 下 2 名称 建议为 mybatis config xml 2 核心配置文件的内容全部写在根标签
  • delete 与 deleteLater()

    deleteLater 是QT的产物 而C 标准是没有的 delete是C 与QT公用的 所以很多人 是不太相信deleteLater 的 简单地讲一下deleteLater 的作用吧 很多人应该用过 QPointer 吧 deleteLa
  • 小议关于前端HTML的DTD(文档类型定义)

    小议关于前端HTML的DTD 文档类型定义 什么是文档类型定义 Document Type Defination DTD DTD 是用来定义XML文档结构的 HTML可以看做是XML的一种应用 其中DTD作为标准被保留了下来 规定了XML文
  • 放肆一点又何妨(一)-银川与腾格里沙漠

    此时家里的9420智障大音响放着许巍的 生活不止眼前的苟且 由于我不觉得眼前的生活很苟且 于是乎 切成了许巍的 蓝莲花 显然 一首符合心境的歌曲更能提高我的码字速度 言归正传 沙漠回来之后一直想写游记 记录下这一路上遇到的小伙伴 发生以及听
  • ArcGIS Flex热图

    ArcGIS Flex热图 一直都认为HeatMap是一个伟大的widget 它可以清晰的表达当前的热点区域 无论是直观上还是动态性方面 都是一项了不起的二维地图革新 之前在农业项目中多是等值面的应用 等值面它是通过精确插值计算所得到的结果
  • 【线性代数的几何意义】什么是线性代数

    一 什么是线性代数 线性与非线性 非线性问题则可以在一定基础上转化为线性问题求解 线性空间 对所谓的要满足 加法 和 数乘 等八条公理的元素的集合 线性函数 几何意义 过原点的直线 平面 超平面 代数意义 可加性 比例性 可加性 线性的可加
  • elk笔记19--es python api

    elk笔记19 es python api 1 Elasticsearch 1 1 基础连接 写入 查询 1 2 通过 scroll api 拉取数据 2 Indices 2 1 indices 基础创建 删除 3 Ingest 4 Clu
  • H5 页面 不对 px 进行转 rem

    H5 页面使用 postcss px2rem 对 H5 页面进行适配后 px 样式都会转化为 rem 但有些地方的 px 不需 要转化为 rem 不需要进行转化的在样式后面加 no 或 PX 大写 vant 修改样式使用 no 后 px 还
  • Intellij IDEA--插件配置plugins

    公司网络设置代理 File gt settings gt plugins gt Browse repositories gt HTTP Proxy Settings 设置代理服务的ip 端口 查找插件安装 File gt settings
  • 测试框架jmockit入门(示例demo以及踩坑记录)

    一 什么是jmockit jmockit的优点 1 为了让程序更加可靠 健壮 以及保证在项目重构时前后的业务逻辑保持一致 通俗说就是 尽量避免bug 从而需要编写单元测试 2 一个好的单元测试是指 在能测试覆盖它所有的逻辑代码下 同时实现解
  • GPT时代,一定要收藏的结构化提问技巧

    有一种被称为 SMART 的结构化提问方法 可以帮助你更好的组织和明确提出的问题 SMART 是一个缩写 它代表了以下几个关键元素 S Specific 具体 确保问题具体明确 避免模糊或含糊不清的表达 明确你想要得到的具体信息或解决的问题
  • 在cmd命令行输入python出现Warning:This Python interpreter is in a conda environment, but the environment has

    1 当我们在cmd中输入python后出现warning 意思是python的解释器处于conda环境中 但是该环境没有被激活库可能无法加载 解决办法请看官方网站 https conda io activation 2 官方网站是全英文的
  • android linearlayout weight工作原理

    阿里线下一面中 面试官问我 view的渲染过程 回答不会 然后他就问了linearlayout中 weight的工作原理 weight实际上并不能理解为权重 要把其理解为权重 则要把对应的height width 0dp 设 linearl
  • linux系统安装时间的设置

    sudo cp usr share zoneinfo Asia Shanghai etc localtime 覆盖localtime 文件即可 date 命令即可显示正常命令
  • python爬取抖音用户评论_python实现模拟器爬取抖音评论数据的示例代码

    目标 由于之前和朋友聊到抖音评论的爬虫 demo做出来之后一直没整理 最近时间充裕后 在这里做个笔记 提示 大体思路 通过fiddle app模拟器进行抖音抓包 使用python进行数据整理 安装需要的工具 python3 下载 fiddl
  • 2022年最新全国各省五级行政区划代码及mysql数据库代码(省市区县乡镇村)

    2022年最新全国各省五级行政区划代码及mysql数据库代码 省 市 区县 乡镇 村 原创不易 如有遗漏请留言 1 全国统计用区划代码和城乡划分代码更新维护的标准时点为2021年10月31日 2 全国31省 多达 61W 行数据 3 mys
  • 三次握手、四次挥手过程;TCP保证可靠传输

    三次握手 四次挥手过程 一 TCP 3次握手的过程 1 1 为什么要3次 2次 4次不行吗 二 四次挥手的过程 2 1 为什么要等待2MSL的时间才关闭 三 TCP怎么保证传输过程的可靠性 一 TCP 3次握手的过程 建立连接前server
  • Linux 中 awk 与 sed 操作

    4 awk之文本操作运算 awk是一种操作数据流的行和列的工具 也是一种编程语言 awk有很多内建的功能 比如数组 函数等 这和C语言有相同之处 sudo apt get install gawk awk BEGIN print start