在unix中将列拆分为行并提取选择性数据
我有一个要求,即有一个原始数据文件,其中有一列(其中有不同的记录,每条记录以VMEMBER名称开头),格式固定,我需要提取每条记录 并以表格格式仅显示少数字段 输入文件:在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 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
默认包含换行符
见: