使用awk迭代unix命令nm并通过多个文件求和输出

时间:2017-01-31 19:27:39

标签: bash awk nm

我目前正在编写一个脚本,该脚本将查看nm的输出,并使用以下

对列$1的值求和
read $filename
nm --demangle --size-sort --radix=d ~/object/$filename | {
    awk '{ sum+= $1 } END { print "Total =" sum }'
}

我想对任意数量的文件执行以下操作,循环遍历目录,然后输出结果摘要。我想要每个文件的结果以及添加所有列的第一列的结果。

我只能使用bash和awk。

2 个答案:

答案 0 :(得分:0)

您需要暂时读取$ filename;做;完成循环并将整个循环的输出提供给awk。

e.g。

while  read filename ; do
       nm  ...  $filename 
done  |  awk '{print $0}  { sum+=$1 } END { print "Total="sum}'

awk {print $ 0}将打印每个文件的行,以便您可以看到每个文件。

答案 1 :(得分:0)

bash globstar选项用于递归文件匹配
您可以在末尾awk命令中使用类似**/*.txt

$ shopt -s globstar
$ awk '
    BEGINFILE { 
        c="nm --demangle --size-sort --radix=d \"" FILENAME "\"" 
        while ((c | getline) > 0) { fs+=$1; ts+=$1; }  
        printf "%45s %10'\''d\n",FILENAME, fs
        close(c); fs=0; nextfile
    } END { 
        printf "%30s %s\n", " ", "-----------------------------" 
        printf "%45s %10'\''d\n", "total", ts 
    }' **/*filename*