awk:非终止字符串

时间:2012-10-11 13:30:27

标签: awk terminal

我正在尝试运行下面的命令,它给了我错误。关于如何修复的想法?我宁愿这是一个单行命令而不是脚本。

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'

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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选项从调用此awk脚本的shell脚本传入string变量。或者,如果这是一个独立的awk脚本(使用#! shebang),您可以使用ARGV来引用命令行选项。