在unix中将列拆分为行并提取选择性数据

在unix中将列拆分为行并提取选择性数据,unix,awk,split,Unix,Awk,Split,我有一个要求,即有一个原始数据文件,其中有一列(其中有不同的记录,每条记录以VMEMBER名称开头),格式固定,我需要提取每条记录 并以表格格式仅显示少数字段 输入文件: VMEMBER NAME ABCD V***** dssdsdsdsdddassdas VUSER VSESSION VPROF QFUSER VACB SDDSDASD VAPPLID USAS VAPPLID ZXCV VAPPLID TYU VMEMBER NAME EFGH V***** dssdsdsdsdddass

我有一个要求,即有一个原始数据文件,其中有一列(其中有不同的记录,每条记录以VMEMBER名称开头),格式固定,我需要提取每条记录 并以表格格式仅显示少数字段

输入文件:

VMEMBER NAME ABCD
V***** dssdsdsdsdddassdas
VUSER
VSESSION
VPROF QFUSER
VACB SDDSDASD
VAPPLID USAS
VAPPLID ZXCV
VAPPLID TYU
VMEMBER NAME EFGH
V***** dssdsdsdsdddassdas
VUSER asddds
VSESSION ssdsasad
VPROF  GFUSER
VACB SDDSDASD
VAPPLID USAS
VAPPLID ASDF
VAPPLID ERTT
输出:

VMEMBER NAME  VPROF     VAPPLID
ABCD         QFUSER     USAS,ZXCV,TYU
EFGH         GFUSER     USAS,ASDF,ERTT
VMEMBER NAME VPROF VAPPLID ABCD QFUSER USAS,ZXCV,TYU EFGH GFUSER USAS,ASDF,ERTT 我已经用awk尝试过了,VAPPLID的最后一部分是工作(group by) 但是我无法获得上面提到的所有三列的输出

你能用GNU awk帮我解决这个问题吗

awk 'BEGIN{print "VMEMBER NAME\tVPROF\t\tVAPPLID"}
     $1=="VMEMBER" {OFS=""; printf("%s%s\t\t",x,$3)}
     $1=="VPROF"   {printf("%s\t\t",$2)}
     $1=="VAPPLID" {x=RS; printf("%s%s",OFS,$2); OFS=","}
     END{print ""}' file
输出:

VMEMBER NAME  VPROF     VAPPLID
ABCD         QFUSER     USAS,ZXCV,TYU
EFGH         GFUSER     USAS,ASDF,ERTT
VMEMBER NAME VPROF VAPPLID ABCD QFUSER USAS,ZXCV,TYU EFGH GFUSER USAS,ASDF,ERTT V成员名称VPROF VAPPLID ABCD QFSUS,ZXCV,TYU EFGH GFUSAS、ASDF、ERTT
RS
默认包含换行符


见: