输入文件日期块每4行更改一次(第1列)。例如,对于第061218和第061418天,,但在date 061318的情况下不是这样,它包含8行。
然后,如果日期在5行后不更改,如date 061318的示例,则需要将第二部分行的值5-8添加到行1-4的末尾。以正确获取所需的输出文件。
输入文件
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输出文件
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我试过:
awk -F, '{a[$1]=a[$1]?a[$1]","$2:$2;}END{for (i in a)print i, a[i];}' OFS=, file提前感谢
发布于 2018-08-11 10:20:06
如果您的Input_file与所示的示例相同(您在评论中提到了这个示例),那么请您尝试以下操作。
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兼容。
https://stackoverflow.com/questions/51798052
复制相似问题