1

以下のコマンドを実行しようとしていますが、エラーが発生します。修正方法について考えていますか?これは、スクリプトよりも 1 行のコマンドの方がよいでしょう。

grep  "id\": \"http://room.event.assist.com/event/room/event/" failed_events.txt |
head -n1217 |
awk -F/ ' { print $7 } ' |
awk -F\" ' { print "url \=  \"http\:\/\/room\.event\.assist\.com\/event\/room\/event\/'{ print $1 }'\?schema\=1\.3\.0\&form\=json\&pretty\=true\&token\=582EVTY78-03iBkTAf0JAhwOBx\&account\=room_event\"" } '
awk: non-terminated string url =  "ht... at source line 1
 context is
     >>>  <<< 
awk: giving up
 source line number 2

以下の行は、ID の単一の列をエクスポートします。

grep  "id\": \"http://room.event.assist.com/event/room/event/" failed_events.txt |
    head -n1217 |
    awk -F/ ' { print $7 } '

156512145
898545774
454658748
898432413

上記の ID を次のような文字列に変換しようとしています。

" url = "string...'ID'string"

4

2 に答える 2

1

あなたが最後の awk に持っているものを見てください:

 awk -F\" 
 '  #single start here
    { print "  #double starts for print, no ends

        url \=  \"http\:\/\/room\.event\.assist\.com\/event\/room\/event\/
 '   #single ends here???

        { print $1 }'..... #single again??? ...
(rest codes)

正確に印刷したい{print }ですか?私はそうは思わない。なぜあなたはネストしていたのprintですか?

于 2012-10-11T13:43:25.893 に答える
0

パイプの要素のほとんどは、awk 内で表現できます。

最後の awk スクリプトで何をしたいのか正確にはわかりませんが、いくつかのポイントを次に示します。

  • あなたの「grep」は、正規表現ではなく、テキストの文字列を探しているだけです。
  • index()RE の代わりにawk の関数を使用すると、時間を節約し、物事を単純化できます 。ほとんどの場合、出力形式は printf() を使用して処理するのが最適です。

入力データが提供されていないため、このコードをテストできません。機能しない場合は、調整する必要があります。しかし、ここに行きます:

awk -F/ '
  BEGIN {
    string="id\": \"http://room.event.assist.com/event/room/event/";
    fmt="url = http://example.com/event/room/event/%s?schema=whatever\n";
  }

  count == 1217 { nextfile; }

  index($0, string) {
    split($7, a, "\"");
    printf(fmt, a[0]);
    count++;
  }' failed_events.txt

必要に応じて、awk の-vオプションを使用してstring、この awk スクリプトを呼び出すシェル スクリプトから変数を渡すことができます。または、これが (shebang を使用する) スタンドアロンの awk スクリプトである場合は、.#!でコマンド ライン オプションを参照できますARGV

于 2012-10-11T15:47:19.477 に答える