2012-10-11 92 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