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

Posted 我不是代码教父

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[原创]脚本小技巧:awk变量传递到shell变量相关的知识,希望对你有一定的参考价值。

[简介]
常用网名: 猪头三
出生日期: 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脚本的程序员有所帮助.

以上是关于[原创]脚本小技巧:awk变量传递到shell变量的主要内容,如果未能解决你的问题,请参考以下文章

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

是否可以将脚本传递给shell变量中的awk?

如何在 awk 脚本中使用 shell 变量?

如何将变量从 awk 传递到 shell 命令?

shell脚本编程小技巧——如何解决多行重定,变量不被shell解释

Linux Shell常用技巧 awk编程