awk字符串并将其放在同一行

时间:2017-11-12 21:30:32

标签: shell awk

有人可以帮我格式化下面的文件(file_origin)和awk程序到下面的文件结果(file_result),谢谢。

file_origin:

  

2017-11-11 09:01:12,m02occ3,transactions.tps,692

     

2017-11-11 09:01:12,m04occ1,transactions.tps,710

     

2017-11-11 09:01:12,m07occ4,transactions.tps,688

     

2017-11-11 09:01:12,m10occ2,transactions.tps,714

     

2017-11-11 09:06:12,m02occ3,transaction.tps,704

     

2017-11-11 09:06:12,m04occ1,transaction.tps,714

     

2017-11-11 09:06:12,m07occ4,transactions.tps,702

     

2017-11-11 09:06:12,m10occ2,transaction.tps,732

     

2017-11-11 09:11:12,m02occ3,transactions.tps,708

     

2017-11-11 09:11:12,m04occ1,transactions.tps,729

     

2017-11-11 09:11:12,m07occ4,transactions.tps,705

     

2017-11-11 09:11:12,m10occ2,transactions.tps,726

     

2017-11-11 09:16:12,m02occ3,transaction.tps,716

     

2017-11-11 09:16:12,m04occ1,transactions.tps,733

     

2017-11-11 09:16:12,m07occ4,transactions.tps,716

     

2017-11-11 09:16:12,m10occ2,transactions.tps,734

     

2017-11-11 09:21:12,m02occ3,transactions.tps,719

     

2017-11-11 09:21:12,m04occ1,transactions.tps,745

     

2017-11-11 09:21:12,m07occ4,transactions.tps,724

     

2017-11-11 09:21:12,m10occ2,transactions.tps,745

file_result:

  

2017-11-11 09:01:12,m02occ3,m04occ1,m07occ4,m10occ2,692,710,688,714

     

2017-11-11 09:06:12,m02occ3,m04occ1,m07occ4,m10occ2,704,714,702,732

     

2017-11-11 09:11:12,m02occ3,m04occ1,m07occ4,m10occ2,708,729,705,726

     

2017-11-11 09:16:12,m02occ3,m04occ1,m07occ4,m10occ2,716,733,716,734

     

2017-11-11 09:21:12,m02occ3,m04occ1,m07occ4,m10occ2,719,745,724,745

2 个答案:

答案 0 :(得分:1)

awk救援!

$ awk -F, '{if($1 in a) {a[$1]=a[$1] FS $2; b[$1]=b[$1] FS $NF} 
            else        {a[$1]=$2;          b[$1]=$NF}} 
       END {for(k in a) print k FS a[k] FS b[k]}'

通过连接每个关键字段(第一个字段)的第二个字段和最后字段来构造两个列表。完成后,按键打印。连接需要对第一个字段进行不同的处理(我们希望字段分隔符少于连接的字段数),这就是检查($1 in a)

之前是否观察到特定密钥的原因

作为学习经验,您可以删除else阻止和if()条件,只需使用if语句并观察效果。

答案 1 :(得分:0)

我还没有测试过,但可以按照以下方式进行测试:

假设(根据您提供的数据和示例)

  1. 每4行将产生一行并具有相同的日期值
  2. 第二列顺序总是重复如下:m02occ3,m04occ1,m07occ4,m10occ2
  3. 注意:getline函数将读取下一行

    代码:

    awk '{
        v_date=$1;
        v1=$4;
        getline;
        v2=$4;
        getline;
        v3=$4;
        getline;
        v4=$4;
        print v_date ",m02occ3,m04occ1,m07occ4,m10occ2," v1 "," v2 "," v3 "," v4;
    }'