我正在处理多个文件,确实需要更改文件之间的记录分隔符。在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/ { ... }