0

私のスクリプトには次のものがあります。

function processurl
{
}

some_text%%%url1%%%url2%%%url3%%%

URL の数は 0 から任意の有限数の間で変化します (0 の場合、文字列は some_text%%% になります)

processurl を URL に適用し、出力を次のようにします。

some_text%%%processurl url1%%%processurl url2%%%processurl url3%%%

これを行う方法の手がかりはありますか?

4

2 に答える 2

1

awk のような言語では、関数を引数として渡すことはできません。したがって、逆の方法で行う必要があります。まず、入力を分割し、処理して、再び結合する必要があります。次のように実行できます。

これにより、入力が分割されます。

awk -F"%%%" '{for(i=2;i<=NF;i++){if (i==NF){print ""}else print $i}}' file

これで、行ごとに読み取って関数を適用できます。この関数は、シェル スクリプト「processurl」に保存する必要があります。

| while read url; do ./processurl $url; done

そして再び参加してください:

awk 'BEGIN{RS=""}{for (i=1;i<=NF;i++)
    {if (i==NF){printf "\s%%%%%%\n",$i}else{printf "%s%%%%%%",$i}}}'

HTH クリス

于 2011-09-28T06:05:15.617 に答える
1

これは実際にはこれと同じ質問です(これもあなたから) Scripting in Bash

processURL 関数をスクリプトとして保存し、パラメーターを期待して、awk で $i をこのスクリプトに送信し、結果を得ることができます。(awkでgetlineを使用できます)。

他の質問で私の答えを見てください。例があります。

于 2011-09-28T08:49:22.857 に答える