2

I want to build a bash script that reads a file and produces some command line parameters. my input file looks like

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

I must detect and copy all the __* strings and turncate them into a command such as

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

So far I use

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

to detect the requested lines but i guess, what i need is a one-line-command thing that i can't figure out. Any kind suggestions?

4

3 に答える 3

3

猫の皮を剥ぐもう1つの方法:

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

sedスクリプトは、で行を検索__し、最後のスペースまですべてを変更し-Eて結果を出力します。空白にタブが含まれる可能性がある場合は、少し調整する必要があります。明確にするために、ここではそれを説明しませんでした。

于 2012-06-02T03:51:12.773 に答える
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 に答える
2

使用awk:

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