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 = "字符串...'ID'字符串"

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”实际上只是在寻找一串文本,而不是正则表达式。
  • 如果您使用 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从调用此 awk 脚本的 shell 脚本传入变量。或者,如果这是一个独立的 awk 脚本(使用#!shebang),您可以使用ARGV.

于 2012-10-11T15:47:19.477 回答