演示文件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
如何将这两部分结合起来,是否可以用一句话来表达它们?
答案 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