微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 如何将awk变量传递给bash命令

如何将awk变量传递给在awk中运行的bash命令?

我正在使用awk计算每个特定进程的线程运行总和,但后来我想使用每个pid来访问/ proc / $pid文件系统.

下面标记为断开的行不正确,因为$pid不存在.

如何将awk变量pid导出到shell命令我运行awk?

(为了便于阅读,添加了换行符)

$ps -ALf | grep $PROC | grep -v grep | \         # get each pid
    awk '{threads[$2]+=1} END \                   # count num threads per pid
         { \
           for (pid in threads) \
              "cat /proc/$pid/cwd"|getline cwd; \ # get 'cwd' (**broken**)
               print cwd ": " threads[pid] \      # display 'cwd' and num threads
         }'

解决方法:

您可以在中完成所有操作而无需任何greps链接

% ps -ALf | awk -v proc="${PROC}" '
$0 ~ proc && !/awk/ {
    threads[$2] += 1
}
END {
    for (pid in threads) {
        "readlink /proc/" pid "/cwd" | getline dir
        printf "%d: %d %s\n", pid,  threads[pid], dir
        dir=""
    }
}'

一些值得注意的事情:

> -v proc =“${PROC}”将环境变量${PROC}分配给awk变量proc
>“readlink / proc /”pid“/ cwd”连接三个字符串.在awk中不需要任何连接运算符.
> dir =“”重置dir变量,以防下次循环时符号链接无法读取.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐