2

我想构建一个 bash 脚本来读取文件并生成一些命令行参数。我的输入文件看起来像

20.83      0.05     0.05  __adddf3
20.83      0.10     0.05  __aeabi_fadd
16.67      0.14     0.04  gaussian_smooth
8.33      0.16     0.02   __aeabi_ddiv

我必须检测并复制所有 __* 字符串并将它们转换为命令,例如

gprof -E __adddf3 -E __aeabi_fadd -E __aeabi_ddiv ./nameof.out

到目前为止,我使用

#!/bin/bash
while read line
do
    if [[ "$line" == *__* ]] 
    then
        echo $line;
    fi
done <input.txt

检测请求的行,但我想,我需要的是我无法弄清楚的单行命令。有什么好的建议吗?

4

3 回答 3

3

修改你的脚本:

#!/bin/bash
while read -r _ _ _ arg
do
    if [[ $arg == __* ]] 
    then
        args+=("-E" "$arg")
    fi
done <input.txt
gprof "${args[@]}" ./nameof.out

下划线是有效的变量名,用于丢弃不需要的字段。

最后一行执行带有参数的命令。

while您可以使用进程替换将另一个命令的结果输入循环:

#!/bin/bash
while read -r _ _ _ arg
do
    if [[ $arg == __* ]] 
    then
        args+=("-E" "$arg")
    fi
done < <(gprof some arguments filename)
gprof "${args[@]}" ./nameof.out
于 2012-06-02T03:46:11.923 回答
3

给猫剥皮的另一种方法:

gprof `sed -ne '/__/s/.* / -E /p' input.txt` ./nameof.out

sed 脚本搜索带有 的行__,然后将所有内容更改到最后一个空格-E并打印结果。如果您的空白可能包含制表符,您可能需要稍微调整一下。为了清楚起见,我在这里没有考虑到这一点。

于 2012-06-02T03:51:12.773 回答
2

使用awk

awk '$4 ~/^__/{a=a" -E "$4}END{system("gprof "a" ./nameof.out")}' inputFile
于 2012-06-02T03:20:00.450 回答