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

时间:2017-04-01 01:56:28

标签: 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.306243875000000,601,02 3E 80 00 00 00 00 00

请注意:

  • 时间戳应该在必要时加上后缀
  • 数据字节应该在它们之间删除

4 个答案:

答案 0 :(得分:2)

$ awk -F, '{$1=sprintf("%.15f",$1); for(i=1;i<3;i++) sub(OFS,FS)} 1' file
3.840527449999989,6A3,06 67 07 DF 0D 63 81 AA
4.306243875000000,601,02 3E 80 00 00 00 00 00

答案 1 :(得分:1)

使用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

答案 2 :(得分:1)

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等)。

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed ':a;/^[0-9.]\{17\},/!s/,/0,/;ta;s/,/ /3g' file

如果第一个字段不是长度17,请插入0直到它为止,然后用空格替换第三个,

N.B。预先假设第一个字段不长于17,并且该字段是所示类型的编号。此外,记录布局为例,字段2不包含,,即不是引用字段。