2012-10-11 130 views
1

我試圖運行下面的命令,它給我的錯誤。關於如何解決的想法?我寧願這是一個單行命令而不是腳本。awk:非終止字符串

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 =」 字符串。 ..'ID'string」

+1

你能給我們一些樣本輸入和預期的輸出嗎?雖然我們可以修復你的語法錯誤(看起來像是凌亂的引號),但我強烈懷疑有一種更好的方法來實現你想要做的事情。 – ghoti

+0

謝謝,更新了我原來的問題.. – Tony

回答

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

+0

,因爲我想從最後的awk語句打印$ 1 ... – Tony

+0

@it不會像那樣工作。無論如何,你的問題'爲什麼非終止字符串'被回答。你最好看看@ ghoti的評論。 – Kent

0

你的管道的大部分元素都可以在awk中表示出來。

我不能告訴你想要什麼與上次awk腳本做的,但這裏有一些要點:

  • 你的「grep」真的只是尋找文本字符串,而不是 正則表達式。
  • 您可以節省時間,如果你使用awk的 index()函數,而不是一個RE的事情簡單化。輸出格式幾乎總是使用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變量傳遞從一個shell腳本調用此awk腳本。或者,如果這是一個獨立的awk腳本(使用#! shebang),則可以參考ARGV的命令行選項。

+0

我一直在尋找這樣做的單一命令,而不是腳本,這是不可能的? – Tony