Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何合并数据的两部分?_Linux_Awk - Fatal编程技术网

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

由于不清楚,请您发布预期的样品输出。又短又脆,我想咬一口<代码>:-)