我想构建一个读取文件并生成一些命令行参数的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
检测所请求的行,但我想,我需要的是一个单行命令的东西,我无法弄清楚。有什么建议吗?
答案 0 :(得分: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
答案 1 :(得分:3)
给猫皮肤的另一种方法:
gprof `sed -ne '/__/s/.* / -E /p' input.txt` ./nameof.out
sed脚本使用__
搜索行,然后使用-E
将所有内容更改为最后一个空格并打印结果。如果你的空格可能包含标签,你可能需要稍微调整一下。为清楚起见,我在这里没有考虑到这一点。
答案 2 :(得分:2)
使用awk
:
awk '$4 ~/^__/{a=a" -E "$4}END{system("gprof "a" ./nameof.out")}' inputFile