[原创]脚本小技巧:awk变量传递到shell变量

2023-11-15

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
个人网站: https://www.x86asm.org
QQ交流: 643439947
编程生涯: 2001年~至今[共20年]
职业生涯: 18年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
最近在忙着复习shell脚本语言, 一共花费了10天. 这次要写真正意义的shell脚本程序, 因此这次复习不可马虎.

[遇到的麻烦]
在写shell脚本代码的时候, 会发现awk很好用, 它的语法避开了很多shell语法的坑. 所以我尝试大规模的代码全在awk里面, 少量代码在shell里面. 但在开发过程中, 遇到一个小麻烦: 在非单行程序中, awk变量如何传递给shell使用呢? 经过2天的测试和反复阅读awk和shell的书籍, 正确写出了演示代码: 

[在非单行awk引用单行shell/多行shell的优势]
1> 可以专注awk的简单语法, 避免各种带有坑的shell语法
2> 在awk环境下, 可执行单行shell/多行shell命令, 这样可以适当发挥shell大量内置命令或者外部命令的优势

[awk变量传递给单行shll的代码演示]

#awk的BEGIN区域
#在awk下执行单行shell代码. 注意 语法是 { sh2ll代码1; shell代码2; shell代码3; }
BEGIN {

    #演示作用: awk的变量为var_for_awk, 通过awk的管道传递给单行shell, 在shell内使用read命令接受并保存到var_get_awk变量 
    var_read_cml = "var_get_awk; printf \"$var_get_awk\n\"; } "
    var_read_cml_full = "{ read " var_read_cml
    var_for_awk = "Hello world\n" 
    printf var_for_awk | ("{ read " var_read_cml)
    close("{ read " var_read_cml)

}

[awk变量传递给多行shll的代码演示]

#在awk下执行单行shell代码. 注意 语法是
# sh2ll代码1\n
# shell代码2\n
# shell代码3\n

BEGIN {

    #演示作用: awk的变量为var_for_awk, 通过awk的管道传递给多行shell, 在shell内使用read命令接受并保存到var_get_awk变量 
    var_read_cml = "var_get_awk\n"\
                   "printf \"$var_get_awk\n\"\n"\
                   "printf \"shell end...\n\""
    var_read_cml_full = "read " var_read_cml
    var_for_awk = "Hello world\n" 
    printf var_for_awk | ("read " var_read_cml)
    close("read " var_read_cml)

}

[以上代码需要注意的细节]
1> 记得使用close关闭已经打开的管道, 否则awk的BEGIN模块和END模块无法进行同步处理, 也就是说BEGIN模块没有运行完成, 则END模块已经启动了.

[结尾]
希望这个小代码技巧对喜欢shell脚本的程序员有所帮助.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[原创]脚本小技巧:awk变量传递到shell变量 的相关文章

  • 将 awk 输出保存到变量 [重复]

    这个问题在这里已经有答案了 谁能帮我解决这个问题吗 我正在尝试将 awk 输出保存到变量中 variable ps ef grep port 10 grep v grep port 10 awk printf s 12 printf var
  • 使用 awk 打印匹配键的列范围

    这似乎有一个简单的解决方案 但我被困住了 我想在密钥文件中查找主文件的第二列 对于任何匹配的密钥 仅打印前两列 但打印其余的整个记录 我有一个工作脚本 但它打印匹配键的整行 你能帮忙吗 awk FNR NR key 1 next 2 in
  • 从命令行查找并替换多行文本

    我正在尝试使用还执行其他操作的脚本编辑配置文件 该脚本需要找到某些连续的文本行并将其删除 它需要在适当的位置粘贴一个新配置 该新配置从旧配置所在的同一行开始 在新旧配置中 空间的使用都很重要 在 configfile php 中 此文本块
  • 解释awk命令

    今天我在网上搜索一个命令来打印模式后的下两行 我遇到了一个我无法理解的 awk 命令 usr xpg4 bin awk PATTERN 2 input 有人可以解释一下吗 See https stackoverflow com a 1791
  • 使用 awk 仅从字符串中获取数字

    背景 我有一个专栏should以 描述文本 ref12345678 的形式获取用户输入 我有现有的脚本可以获取参考号 但不幸的是一些用户错误地添加了它 所以而不是 ref12345678 有可能 ref 12345678 RF1234567
  • 执行 tail -F 直到匹配模式

    我想做一个tail F在文件上直到匹配模式 我找到了一种使用方法awk 但恕我直言 我的命令并不是很干净 问题是我need由于某些限制 只能用一行来完成 tail n 0 F tmp foo awk W interactive if 1 E
  • 批处理 - 解析 Tracert 的输出

    我想寻求有关 Windows 中 Tracert 输出的一些帮助 即我有以下输出 Tracing route to Y Y Y Y over a maximum of 30 hops 1 1 ms 1 ms 1 ms X X X X 2 1
  • BASH - 使用 Loop 和 If 语句总结唯一字段中多个字段的信息

    我有以下制表符分隔的文件 A1 A1 0 0 2 1 1 1 1 1 1 1 2 1 1 1 A2 A2 0 0 2 1 1 1 1 1 1 1 1 1 1 1 A3 A3 0 0 2 2 1 1 2 2 1 1 1 1 1 1 A5 A5
  • 从unix中的内部列中删除csv文件中的新行字符

    输入数据示例 cat test csv 234 aa bb cc 30 dd 22 cc ff dd 40 gg pxy aa cc 40 dd 所需输出 cat test new csv 234 aa bb cc 30 dd 22 cc
  • 如何将包含空格的参数传递给包含 gawk match() 的脚本?

    gt gawk match foo bar junk 是一个合法的命令 我想传递参数foo bar在 shell 脚本中添加它 foobar sh其中有 bin bash gawk match 1 junk 不起作用 gt foobar s
  • 如何使用 awk 将一组重复的行转置为列

    我有一个文本文件 其中包含 7 列数据 格式如下 18030 AAJ51 FTO rs9939609 C 30090620 10 A T 18030 AAJ51 CAT rs1001179 C 11468118 10 C C 18030 A
  • 查找列中字段的平均值[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个这样的记录 1 11 11 T A 0 0 A 1 B 2 C 3 D 4 有 8 列 每列由制表符空格分隔 我需要的输出是这
  • 使用 awk 添加列。这个 awk 命令有什么问题?

    我想将两列添加到大约 10 000 列的文件中 我想在每行插入 nr 22 作为第一列 然后我想要将原始第一列作为第二列 然后作为第三列我想要插入第 nr NR 行 之后我想要打印其余的原始列 我想我可以用下面的 awk 行来做到这一点 a
  • awk 排序多维数组[重复]

    这个问题在这里已经有答案了 GNU awk 支持多维数组 gnu org software gawk manual gawk Arrays of Arrays q 1 1 dog q 1 2 999 q 2 1 mouse q 2 2 77
  • 在 awk 中按特定顺序打印文件

    我正在关注这个链接https stackoverflow com a 54599800 10220825 https stackoverflow com a 54599800 10220825 file txt Iteration 1 RA
  • Bash 脚本问题

    我可以很好地运行这个命令 并得到我想要的输出 ifconfig eth0 grep HWaddr awk print 5 但是 当我将命令设置为变量并打印该变量时 出现错误 CASS INTERNAL ifconfig eth0 grep
  • 如何在 awk 或 sed 中编写查找所有函数(使用正则表达式)

    我有运行 python 的 bash 函数 它从标准输入返回所有找到的正则表达式 function find all python c import re import sys print n join re findall 1 sys s
  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 如何删除最后一次出现模式后的所有行?

    我想删除最后一次出现模式之后的所有行 除了模式本身 file txt honor apple redmi nokia apple samsung lg htc file txt 我想要什么 honor apple redmi nokia a

随机推荐

  • firebug 调试ajax,Jquery使用Firefox FireBug插件调试Ajax步骤讲解

    首先 我们用一个示例来说明JQuery的Ajax调用过程 实现的一个功能是 点击确认支付按钮之后 实现余额支付的功能 1 首先在php页面将相关需要调用的函数绑定到按钮上 function pay btn bind click ABC ba
  • qq引流有哪些模式? QQ引流的几种方法

    现在做QQ营销的方法真的是太多了 花样百出 什么招式都有的 QQ作为我们常用的交流工具 用于营销也是无可厚非的事情 现在做互联网的 永远离不开两个话题 就是 流量 和 变现 缺少其中一个 你所做的所有事情就完全没有任何意义 1 QQ空间引流
  • Mysql 多表关联查询

    文章目录 1 Mysql中表之间的关系 1 1 多表关系 1 2 外键约束 2 多表联合查询 2 1 交叉连接查询 笛卡尔积 2 2 内连接查询 inner join 2 3 外连接查询 2 3 1 左连接 2 3 2 右连接 2 3 4
  • 【接口测试 】Day3-Postman高级用法1(附项目实战)

    目录 课程大纲 昨日回顾 今日目标 Postman高级用法1 一 用例管理 二 Postman断言 三 环境变量与全局变量 四 请求前置脚本 了解 五 Postman关联 重点 课程大纲 接口测试 Day1 接口测试基础 附项目实战 小慌慌
  • 父页面调用easyui datagrid

    opener tt datagrid insertRow index 0 row name name
  • 关于kerberos使用keytab安全认证连接hive票据过期的问题及解决方法。

    关于kerberos使用keytab安全认证连接hive票据过期的问题及解决方法 问题描述 解决方法 问题描述 本人在使用HiveStreaming的过程中 使用kerberos keytab进行安全验证 程序会保持长期连接 hive jd
  • 动手强化学习(六):DQN 算法

    动手强化学习 六 DQN 算法 1 简介 2 CartPole 环境 3 DQN 3 1 经验回放 3 2 目标网络 4 DQN 代码实践 5 以图像为输入的 DQN 算法 6 小结 文章转于 伯禹学习平台 动手学强化学习 强推 本文所有代
  • 5.1-集成学习

    文章目录 集成框架 Framework of Ensemble 一 Ensemble Bagging 1 1 决策树 Decision Tree 1 2 随机森林 Random Forest 二 Ensemble Boosting 2 1
  • 大模型的普及与应用,数据保护非常重要

    随着AI技术的不断发展和应用 大模型已经成为了AI领域中的一个热门话题 随着大模型的应用越来越广泛 保护隐私和数据安全的重要性也越来越突出 隐私和数据安全不仅仅是技术要求 更是对个人权利和社会发展的必然需求 在AI大模型的应用中 数据是非常
  • ROS机械臂正逆运动学

    这里做一个六轴机械臂用于正逆运动学实验 这里其实一共只有3轴 只有3轴位置没有姿态 所以urdf文件里我在末端做了3个虚拟关节 以便将kdl的frame能够填满 使得齐次坐标变换是规则的 1 urdf建模
  • I2C学习

    参考链接 I2C基础知识学习 主机向从机写数据的过程 1 start信号 2 从机地址 7位地址 3 读写位 一位读写 R W 位 0 写 1 读 4 等待从机应答信号 5 当主机收到从机的应答信号 然后发送访问的从机寄存器地址 6 再次等
  • HTTP协议各个版本之间区别?

    HTTP协议各个版本之间区别 1 区别 2 持久连接 3 管线化 4 持久连接和管线化区别 5 分块传输编码 6 二进制协议 7 多路复用 7 1多路复用与管线话和持久连接的区别 7 2多路复用是如何实现在同一个TCP连接上同时发送多个HT
  • 如何在DSP CCS开发环境中添加VLIB图像处理的库

    CCS Version 5 5 0 00077 VLIB VLIB Function Reference Release 3 3 2 0
  • IDEA使用手册之Java Web项目 debug调试方法

    点击图中按钮开始运行web工程 启动成功 设置断点 通过浏览器发送请求 请求发送之后会自动跳到断点处 并且在断点之前会有数据结果显示 按F8 在 Debug 模式下 进入下一步 如果当前行断点是一个方法 则不进入当前方法体内 跳到下一条执行
  • IDEA插件系列(11):Translation插件——翻译插件

    1 插件介绍 可以翻译词汇 语句 十分方便 2 安装方式 第一种安装方式是使用IDEA下载插件进行安装 第二种方式是使用离线插件进行安装 插件下载地址 http plugins jetbrains com plugin 8579 trans
  • vscode 方法代码块的注释生成方法

    1 安装插件 Document This 2 将光标放置于function上面 快捷键是 Ctrl Alt D 加 Ctrl Alt D 注 vue里的method方法中的function用这个不行 单独的一个文件中可以 类似下面的代码 获
  • ElasticSearch7.6入门学习笔记

    在学习ElasticSearch之前 先简单了解一下Lucene Doug Cutting开发 是apache软件基金会4 jakarta项目组的一个子项目 是一个开放源代码的全文检索引擎工具包 不是一个完整的全文检索引擎 而是一个全文检索
  • ApiPost使用教程

    怎样先新建一个简单的接口 首先打开ApiPost界面点击新建 选择POST请求 输入url 请求参数选择json 输入对应的请求参数 点击发送 就可以请求成功啦 当然我们点击右侧保存 就可以保存该接口 并且左侧可以出现该保存的结果目录 如何
  • 我用js写了一个,除夕烟花秀和春节随机祝福语

    项目截图 进入后的界面 点击按钮 点击之后的动画 烟花结束后的界面 代码实现 涉及的技术 HTML5多媒体 CSS定位 动画 js面向对象 Jquery动画 事件 首先来看HTML代码
  • [原创]脚本小技巧:awk变量传递到shell变量

    简介 常用网名 猪头三 出生日期 1981 XX XX 个人网站 https www x86asm org QQ交流 643439947 编程生涯 2001年 至今 共20年 职业生涯 18年 开发语言 C C 80x86ASM PHP P