如何合并两部分数据?

时间:2018-01-31 07:26:38

标签: linux awk

演示文件redis中的aaa数据为:

million:relive:2270371,18,1
million:relive:user:49976159,27:8,340|2018-01-26 20:25:00
million:relive:stage:22,6,1

结果是根据redis键的第三部分添加一个额外的列:

uid,million:relive:2270371,18,1
user,million:relive:user:49976159,27:8,340
stage,million:relive:stage:22,6,1

我可以使用以下方式生成第一列:

awk -F":" '{print $3}' aaa | awk '{if($0 ~ /^[0-9,]+?$/) print "uid"; else print $0}'

第二部分:

awk -F"|" '{print $1}' aaa

如何将这两部分结合起来,是否可以用一句话来表达它们?

3 个答案:

答案 0 :(得分:3)

$ awk -F':' '{sub(/\|.*/,"");print ($3~/^[0-9]+,/?"uid":$3)","$0}' aaa
uid,million:relive:2270371,18,1
user,million:relive:user:49976159,27:8,340
stage,million:relive:stage:22,6,1

以上单行应该对你有所帮助。它首先删除了|......部分,然后根据$3

添加密钥

答案 1 :(得分:2)

您可以使用以下awk命令:

$awk -F":" '/\|/{sub(/\|.*/,"",$0)}{if($3 ~ /^[0-9,]+?$/)printf "uid,";else printf $3",";print $0}' aaa

这产生以下输出:

uid,million:relive:2270371,18,1
user,million:relive:user:49976159,27:8,340
stage,million:relive:stage:22,6,1

答案 2 :(得分:2)

以下是解决方案指南中的另一个awk单行

$ awk -v OFS=":" '{sub(/\|.*$/,"");FS=":";sub(/^/,match($3,/^(user|stage)$/,a)?a[1]",":"uid,",$1)}1' file

uid,million:relive:2270371,18,1
user,million:relive:user:49976159,27:8,340
stage,million:relive:stage:22,6,1