awk记录分隔符(命令行vrs运行时)

时间:2014-06-05 16:38:34

标签: awk

我正在处理多个文件,确实需要更改文件之间的记录分隔符。在RS变量改变后重新处理第一行时出现问题,即使我告诉awk在RS更改后重新处理该行。

我需要输出1(不是1~):

$ echo "1~"|awk '{RS="~"; $0=$0; print $1}'
1~

我看到大家都建议在命令行或BEGIN块中完成此操作。我不能这样做,因为这是第二个文件(不是第一个)所需的RS。

真实的例子有点冗长,这里有帮助。我首先从管道分隔文件构建一个表。接下来,我将解析EDI消息。 EDI消息使用>分隔其字段和〜在每行的末尾。为了使这更有趣,EDI消息还包括CR LF线。

{ 
  if(FILENAME == "ndc_sub.txt") {
    if(FS!="|"){
      FS=OFS="|"
      RS=ORS="\r\n"
      $0=$0 #reparse
    }
    account=$1
    ndc=$2
    service_date=$3
    new_ndc=$4
    ndc_sub[account,service_date,ndc]=new_ndc
    #print account" "service_date" "ndc
    next
  } 
  if(FS=="|") {
    FS=OFS=">"
    RS=ORS="~\r\n"
    $0=$0 #reparse

    #17 is the last field, the problem is it prints the value (good) but includes the "~" too
    print $17

  }
}
/^EL1/ { ... }

0 个答案:

没有答案