如何使用awk以特殊格式打印字符串?

如何使用awk以特殊格式打印字符串?,awk,sed,printf,Awk,Sed,Printf,它能够转换以下字符串 3.840527449999989,6A3,06,67,07,DF,0D,63,81,AA 4.306243875,601,02,3E,80,00,00,00,00,00 3.840527449999989,6A3,06,67,07,DF,0D,63,81,AA 4.306243875601,02,3E,80,00,00,00,00,00 如下图所示格式化字符串 3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA 4.30624387

它能够转换以下字符串

3.840527449999989,6A3,06,67,07,DF,0D,63,81,AA 4.306243875,601,02,3E,80,00,00,00,00,00 3.840527449999989,6A3,06,67,07,DF,0D,63,81,AA 4.306243875601,02,3E,80,00,00,00,00,00 如下图所示格式化字符串

3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA 4.306243875000000,601,02 3E 80 00 00 00 00 00 3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA 4.306243875000000601,02 3E 80 00 00 请注意:

  • 如有必要,时间戳应后缀为0
  • 数据字节应在它们之间删除

    • 使用
      printf

      awk -F, '{printf("%.15f,%s,%s %s %s %s %s %s %s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10)}' file
      
      输出:

      3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA
      4.306243875000000,601,02 3E 80 00 00 00 00 00
      

      使用
      printf

      awk -F, '{printf("%.15f,%s,%s %s %s %s %s %s %s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10)}' file
      
      输出:

      3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA
      4.306243875000000,601,02 3E 80 00 00 00 00 00
      

      awk
      救援

      awk -F, -v OFS=, '{$1=sprintf("%.15f",$1)}1' file | sed 's/,/ /3g'
      
      3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA
      4.306243875000000,601,02 3E 80 00 00 00 00 00
      

      sed
      (gnu)是将
      替换为空格,要在
      awk
      中做到这一点,您必须指定所有字段中的分隔符(例如,未设置
      OFS
      打印$1“,“$2”,“$3,$4,
      等)。

      awk
      救命

      awk -F, -v OFS=, '{$1=sprintf("%.15f",$1)}1' file | sed 's/,/ /3g'
      
      3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA
      4.306243875000000,601,02 3E 80 00 00 00 00 00
      
      sed
      (gnu)是将
      替换为空格,要在
      awk
      中做到这一点,您必须指定所有字段中的分隔符(例如,未设置
      OFS
      print$1“,”$2“,“$3,$4,$5
      等)。

      awk-F,{$1=sprintf(%.15f),$1);for(i=1;i
      $awk-F,$1=sprintf,''/.15f);for(i=1;i这可能适合您(GNU-sed):

      如果第一个字段的长度不是17,则插入一个
      0
      ,直到长度为17,然后将第三个
      替换为空格

      注意:假定第一个字段长度不超过17,并且该字段是所示类型的编号。此外,记录布局如示例所示,字段二不包含
      ,即不是引用字段。

      这可能适用于您(GNU-sed):

      如果第一个字段的长度不是17,则插入一个
      0
      ,直到长度为17,然后将第三个
      替换为空格


      注意:假定第一个字段不超过17,并且该字段是所示类型的数字。此外,记录布局如示例所示,字段2不包含
      ,即不包含引用字段。

      更新了答案。谢谢,@karakfa!更新了答案。谢谢,@karakfa!奇怪的是发现posfix Number不是0,而是9,我的macos输出第二行的awk部分如下:4.30624387499998601,02,3E,80,00,00,00,00,00,00发现posfix数字不是0,而是9,我的macos输出第二行的awk部分如下:4.30624387499998601,02,3E,80,00,00,00,00,00sed也是满功率的,以前从未使用过“a;”,太好了!sed也是功率full,以前不要使用'a;',太好了!太好了,它避免了sed问题“在替换标志中使用了多个数字或'g',但仍然要看到8或9个后缀,不是0对不起,我不知道
      仍然要看到8或9个后缀,不是0
      意味着什么。太好了,它避免了sed问题“在替换标志中使用了多个数字或'g',但仍然要看到8或9个后缀,不是0对不起,我不知道
      仍然要看到8或9个后缀,不是0意味着什么。