首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据行值将值移动到列

根据行值将值移动到列
EN

Stack Overflow用户
提问于 2018-08-11 08:49:47
回答 1查看 59关注 0票数 1

输入文件日期块每4行更改一次(第1列)。例如,对于第061218和第061418天,,但在date 061318的情况下不是这样,它包含8行。

然后,如果日期在5行后不更改,如date 061318的示例,则需要将第二部分行的值5-8添加到行1-4的末尾。以正确获取所需的输出文件。

输入文件

代码语言:javascript
复制
061218,2660,2660,2661
061218,0,0,0,0
061218,48,30,569
061218,SD/05,F1/R0,SD/05
061318,2654,2654
061318,0,0
061318,114,60
061318,SD/05,F1/R0
061318,2666
061318,0
061318,1
061318,F1/R0
061418,2648,2648,2649
061418,0,0,0
061418,871,868,876
061418,SD/05,F1/R0,SD/05

输出文件

代码语言:javascript
复制
061218,2660,2660,2661
061218,0,0,0,0
061218,48,30,569
061218,SD/05,F1/R0,SD/05
061318,2654,2654,2666
061318,0,0,0
061318,114,60,1
061318,SD/05,F1/R0,F1/R0
061418,2648,2648,2649
061418,0,0,0
061418,871,868,876
061418,SD/05,F1/R0,SD/05

我试过:

代码语言:javascript
复制
awk -F, '{a[$1]=a[$1]?a[$1]","$2:$2;}END{for (i in a)print i, a[i];}' OFS=, file

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-11 10:20:06

如果您的Input_file与所示的示例相同(您在评论中提到了这个示例),那么请您尝试以下操作。

代码语言:javascript
复制
awk '
BEGIN{
   FS=OFS=","
}
prev!=$1 && prev{
   for(i=1;i<=count;i++){
     print prev,a[prev,i]
   }
   prev=count=""
}
{
   prev=$1
   sub(/[^,]*,/,"")
   if(count==4){
     count=1
   }
   else{
     count++
   }
   a[prev,count]=a[prev,count]?a[prev,count] OFS $0:$0
}
END{
   if(prev){
     for(i=1;i<=count;i++){
        print prev,a[prev,i]
     }
   }
}'  Input_file

a[prev,count]线上的a[prev,count]=(a[prev,count]?a[prev,count] OFS:"")$0也换成埃德·莫顿先生的风格,以使它也能与其他的awk兼容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51798052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档