程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将 awk 变量导出到 bash 变量?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决将 awk 变量导出到 bash 变量??

开发过程中遇到将 awk 变量导出到 bash 变量?的问题如何解决?下面主要结合日常开发的经验,给出你关于将 awk 变量导出到 bash 变量?的解决方法建议,希望对你解决将 awk 变量导出到 bash 变量?有所启发或帮助;

我想将我在使用 awk 处理文本文件时计算的一些值保存到 bash 变量中。例如,如果我的 file.txt 有以下内容

@R_551_10586@l 16  
dr-xr-xr-x  18 root root  257 Mar 26 16:24 .  
dr-xr-xr-x  18 root root  257 Mar 26 16:24 ..  
-rw-r--r--   1 root root    0 Mar 24 22:23 .autorelabel   
lrwxrwxrwx   1 root root    7 Mar 18 08:15 bin -> usr/bin  
dr-xr-xr-x   4 root root 4096 May 20 17:05 boot  
drwxr-xr-x  14 root root 2860 Apr 17 03:09 dev  
drwxr-xr-x  95 root root 8192 May 20 17:05 etc  

如果我想计算第五列的总和和隐藏文件的数量,我会这样做

awk 'NR>1 {sum+=$5; if(substr($9,1,1)=="."){Count+=1}} END{print "The disk space is " sum " and the number of hIDden files is " count}' file.txt  

输出

磁盘空间为15669,隐藏文件数为3

我想要做的是保存变量 sumcount 供以后在我的脚本中使用,而不必再次进行每次计算,例如像 {{ 1}}

我知道您可以使用 -v 选项将 bash 变量传递给 awk,但我想做相反的事情,例如 awk 中的“{export SUM=sum}”。

解决方法

您可以从进程替换的输出中read

read sum count < <(
    awk '
        NR > 1 {sum += $5; if (substr($9,1,1) == ".") count++}
        END {print sum,count}
    ' file.txt
)
,

关于 I know you can pass bash variables to awk using the -v option - 不完全是。您可以使用 -vawk 变量 初始化为包含 bash 变量的 value 的字符串,但 awk 未访问 bash 变量,bash 正在访问bash 变量在调用 awk 之前填充 -v... 部分。 bash 无法访问 awk 变量 - 如果您想根据 awk 变量的值设置一些 bash 变量,那么您需要从 awk 打印这些 awk 变量的值并在 bash 中读取这些值,例如将所有 awk 输出值读入 bash 数组:

$ awk 'BEGIN{foo=7; bar="stuff"; print foo; print bar}'
7
stuff

$ out=( $(awk 'BEGIN{foo=7; bar="stuff"; print foo; print bar}') )

$ echo "${out[0]}"
7
$ echo "${out[1]}"
stuff

大佬总结

以上是大佬教程为你收集整理的将 awk 变量导出到 bash 变量?全部内容,希望文章能够帮你解决将 awk 变量导出到 bash 变量?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。