我有一个文件,其中前几部分定义了文件的一些属性。
第 9 口是记录分隔符。因此,这些记录不是由\n第 9 口的内容分隔的,而是由第 9 口的内容分隔的。
我需要读取这个文件,设置RS然后“再次”读取该文件,但现在由这个新的记录分隔符分隔。
输入文件(这里记录分隔符是'):
UNA:+,? 'UNB+UNOC:3+4042805000102:14+4016001000655:14+201231:0206+EC33218279A++TL'UNH+1+MSCONS:D:04B:UN:2.3'BGM+7+EC33218279A-1+9'DTM+137:202012310206:203'RFF+Z13:13018'NAD+MS+4042805000102::9'NAD+MR+4016001000655::9'UNS+D'NAD+DP'LOC+172+DE00108108359V0000000000000088446'DTM+163:202012300000?+01:303
Run Code Online (Sandbox Code Playgroud)
awk 程序将类似于:
{ RS=substr($0, 9, 1) }
{ do magic }
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
如果您从未期望第 9 个字符也出现在前 8 个字符中,或者如果确实如此,您不希望在该上下文中将其视为 RS,那么您可以使用 GNU awk 进行多字符处理的 1-pass 方法RS 和 RT:
$ awk -v RS='.{9}' 'NR==1{$0=substr(RT,1,8); RS=substr(RT,9,1)} 1' file
UNA:+,?
UNB+UNOC:3+4042805000102:14+4016001000655:14+201231:0206+EC33218279A++TL
UNH+1+MSCONS:D:04B:UN:2.3
BGM+7+EC33218279A-1+9
DTM+137:202012310206:203
RFF+Z13:13018
NAD+MS+4042805000102::9
NAD+MR+4016001000655::9
UNS+D
NAD+DP
LOC+172+DE00108108359V0000000000000088446
DTM+163:202012300000?+01:303
Run Code Online (Sandbox Code Playgroud)