我有一个这样的数据集:
Name: Jim Bean
Vice: Dice
ID: AFDSDFDSFDSFASFA
LoginTime: 12343314
Name: Bob Dylon
Vice: Trumpets
ID: AFD232SFDSFASFA
LoginTime: 12343314
Name: Mary Jane
Vice: Gambling
ID: EWDSFDSFASFA
LoginTime: 12343314
.....
我需要将其排列成柱状格式。我的第一个想法是使用awk
.但我有点卡住了。
标签将始终以相同的顺序出现,并且每组中始终显示相同数量的标签/值对(标题并不重要)。
我的问题是:我该怎么做?
我已经看到暗示该命令rs
可能能够执行类似的操作,但它并不是所有系统上的标准。
答案1
您应该将所需的输出与您的问题一起发布。我的猜测是这样的:
$ awk '{ if($2) printf("%s ", $2); else print ""; }' < dataset
Jim Dice AFDSDFDSFDSFASFA 12343314
Bob Trumpets AFD232SFDSFASFA 12343314
Mary Gambling EWDSFDSFASFA 12343314
请注意,这是一个非常愚蠢的方法,它根本不验证任何内容。如果您的输入看起来与您发布的内容有任何不同,它可能会崩溃。
答案2
您可以使用 GNU awk 这样做,注意 RS 和 FS 的使用:
<infile awk '{ print $2, $4, $6, $8 }' RS='\n\n' FS=': +|\n' OFS='\t'
如果你想保留标题:
<infile awk 'NR==1 { print $1, $3, $5, $7 } { print $2, $4, $6, $8 }' RS='\n\n' FS=': +|\n' OFS='\t'
假设所有记录都格式化如下,则可以使用 coreutils 执行以下操作:
<infile grep -v '^$' | tr -s ' ' | cut -d' ' -f2- | paste - - - -
输出:
Jim Bean Dice AFDSDFDSFDSFASFA 12343314
Bob Dylon Trumpets AFD232SFDSFASFA 12343314
Mary Jane Gambling EWDSFDSFASFA 12343314
带标题的输出:
Name Vice ID LoginTime
Jim Bean Dice AFDSDFDSFDSFASFA 12343314
Bob Dylon Trumpets AFD232SFDSFASFA 12343314
Mary Jane Gambling EWDSFDSFASFA 12343314