使用 awk 迭代 unix 命令 nm 并通过多个文件求和输出
Using awk to iterate unix command nm and sum output through multiple files
我目前正在编写一个脚本,该脚本将查看 nm
的输出并使用以下
对列 </code> 的值求和
<pre><code>read $filename
nm --demangle --size-sort --radix=d ~/object/$filename | {
awk '{ sum+= } END { print "Total =" sum }'
}
我想对任意数量的文件执行以下操作,遍历一个目录,然后输出结果摘要。我想要每个文件的结果以及添加所有列的第一列的结果。
我仅限于使用 bash 和 awk。
您需要稍后将读取的$filename放入;做; done 循环并将整个循环的输出提供给 awk。
例如
while read filename ; do
nm ... $filename
done | awk '{print [=10=]} { sum+= } END { print "Total="sum}'
awk {print $0} 将打印每个文件的行,以便您可以看到每一行。
bash globstar 选项用于递归文件匹配
你可以在 awk 命令的末尾使用 like **/*.txt
$ shopt -s globstar
$ awk '
BEGINFILE {
c="nm --demangle --size-sort --radix=d \"" FILENAME "\""
while ((c | getline) > 0) { fs+=; ts+=; }
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*
我目前正在编写一个脚本,该脚本将查看 nm
的输出并使用以下
</code> 的值求和
<pre><code>read $filename
nm --demangle --size-sort --radix=d ~/object/$filename | {
awk '{ sum+= } END { print "Total =" sum }'
}
我想对任意数量的文件执行以下操作,遍历一个目录,然后输出结果摘要。我想要每个文件的结果以及添加所有列的第一列的结果。
我仅限于使用 bash 和 awk。
您需要稍后将读取的$filename放入;做; done 循环并将整个循环的输出提供给 awk。
例如
while read filename ; do
nm ... $filename
done | awk '{print [=10=]} { sum+= } END { print "Total="sum}'
awk {print $0} 将打印每个文件的行,以便您可以看到每一行。
bash globstar 选项用于递归文件匹配
你可以在 awk 命令的末尾使用 like **/*.txt
$ shopt -s globstar
$ awk '
BEGINFILE {
c="nm --demangle --size-sort --radix=d \"" FILENAME "\""
while ((c | getline) > 0) { fs+=; ts+=; }
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*