【问题标题】:awk syntax error: syntax error at source line 1awk 语法错误:源代码行 1 的语法错误
【发布时间】:2015-12-24 17:57:35
【问题描述】:

以下是输入文件中一些内容的示例:

                       username: thebestusernamethereis
                    EMAILID: someemail@address.com
               enc_username: NULL
               MACHINE_CODE: NULL
                  FIRSTNAME: John
                   LASTNAME: Doe
                   ADDRESS1: NULL
                   ADDRESS2: NULL
                    COUNTRY: NULL
                       CITY: NULL
                      STATE: NULL
                      ZCODE: NULL
            ACTIVATION_CODE: NULL
             ACCOUNT_STATUS: Y
              CREATION_DATE: 2010-07-02 12:02:33
              DEFAULT_DRIVE: NULL
    EXCHANGE_BACKUP_ALLOWED: N
SYSTEM_STATE_BACKUP_ALLOWED: N
          CHECKSUM_1_METHOD: NULL
          CHECKSUM_2_METHOD: NULL
          additional_flag_1: NULL
          additional_flag_2: NULL
          additional_flag_3: F
                     USEDBY: F
             DATABASE_DRIVE: NULL
              maxquotalimit: 2147483648
              CURQUOTALIMIT: 0
             ECOMMERCE_FLAG: NULL
                      phone:
          cancellation_date: NULL
               proxy_server: sb.domain.com
                 proxy_port: 20000
          proxy_port_server: 10001
                  num_accts: NULL
                 license_cd: NULL
       IDRIVE_DEFAULT_DRIVE: NULL
international_additional_flag_1: M
            move_identifier: NULL
                  subscribe: N
                  client_ip: NULL
               USEDBY_COUNT: 0
           last_update_date: NULL
                  promocode: NULL
           password_support: NULL
          UNDER MAINTENANCE: UNDEFINED

我的 awk 行似乎导致我的脚本出现错误。因此,我按如下方式测试了该行:

cat inputfile.txt | awk '$1 ~ /^(user_name:|EMAIL:|FIRST_NAME:|LAST_NAME:|CREATION_DATE:|REGISTRATION_STATUS:)$/{printf "%s,",$2\} $1 ~ /REGISTRATION_STATUS:/{print $2\}' inputfile.txt > outputfile.txt

我收到的错误是:

awk: syntax error at source line 1
   context is
  $1 ~ /^(user_name:|EMAIL:|FIRST_NAME:|LAST_NAME:|CREATION_DATE:|REGISTRATION_STATUS:)$/{printf >>>  "%s,",$2\ <<< } $1 ~ /REGISTRATION_STATUS:/{print $2\}
awk: illegal statement at source line 1

这个错误的奇怪之处在于,在我更改输出文件名之前脚本很好:old = IDL_$output_file.idl';新 = `$output_file.idl'。这是在上面的 PRODUCT4 下。

所以,我用一个没有错误消息的备份替换了这个文件,它仍然产生这个错误。

我不知道该怎么做才能解决这个问题。我尝试将 #!/bin/sh 更改为 #!/bin/bash 并遇到相同的错误。我不知道语法错误是什么。

我在 Mac El Capitan 上使用 bash。

请帮忙。谢谢!

【问题讨论】:

  • 请不要指望我们通过一个 100 行的脚本来找到导致问题的 awk 的位置。您应该能够以 echo "info ....." | awk '{broken code}' 之类的可测试方式轻松地展示它。当您这样做时,您可能只需隔离问题即可找到问题的根源。祝你好运。
  • 我将编辑我的问题。谢谢。
  • @shellter 我编辑了我的问题,所以它应该更容易处理。再次感谢您。
  • pluse-uno 用于改进您的 Q。请使用此表格填写您以后发布的问题。通常,您还需要包括所需的输出和当前输出。祝你好运。

标签: shell awk


【解决方案1】:

正如错误消息向您显示的那样 - 您在每个 } 之前都有一个反斜杠。

【讨论】:

  • 替换 $/{printf' with ${printf' 未能解决错误。
  • 我找到了!我用 sed 替换了$2}' with $2\}'。学过的知识。批量编辑需要先审核。下一次,我需要将我正在编辑的字符串扩展为更具体,或者使用 VIM 一次编辑每个字符串。感谢您的帮助。
【解决方案2】:

一行中有两个语句,没有分隔分号。 尝试在 $1 之前添加分号或换行符 ~ /REGISTRATION_STATUS:/{print $2}

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2018-08-20
    • 2017-10-03
    • 1970-01-01
    • 2021-09-07
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多