Linux 如何合并数据的两部分?
演示文件Linux 如何合并数据的两部分?,linux,awk,Linux,Awk,演示文件aaa中的redis数据是: 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:re
aaa
中的redis
数据是:
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
如何将这两个部分结合起来,是否可以将它们放在一句话中
$ 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
添加键。您可以使用以下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
下面是解决方案列表中的另一个
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
由于不清楚,请您发布预期的样品输出。又短又脆,我想咬一口<代码>:-)