Awk 重新格式化行

Awk 重新格式化行,awk,sed,Awk,Sed,我有几排像这样的 [206, 40, 200] 3.588939213064659e-06 [206, 40, 58, 200] 1.0137134449402395e-05 [206, 200] 1.2268187790002155e-05 [206, 38, 200] 3.2630262623982875e-05 [206, 40, 38, 200] 3.273281423485983e-05 [206, 40, 58, 38, 200] 3.341643719910475e-05 是否有

我有几排像这样的

[206, 40, 200] 3.588939213064659e-06
[206, 40, 58, 200] 1.0137134449402395e-05
[206, 200] 1.2268187790002155e-05
[206, 38, 200] 3.2630262623982875e-05
[206, 40, 38, 200] 3.273281423485983e-05
[206, 40, 58, 38, 200] 3.341643719910475e-05
是否有一种有效的方法可以使用sed/awk将它们转换为以下内容

206 40 200
206 40 58 200
206 200
206 38 200
206 40 38 200 
206 40 58 38 200
而这个,

206 40 200 0.000003588939213064659
206 40 58 200 0.000010137134449402395
206 200 0.000012268187790002155
206 38 200 0.000032630262623982875
206 40 38 200 0.00003273281423485983
206 40 58 38 200 0.00003341643719910475

谢谢

对于第一个问题,请尝试以下内容

awk 'match($0,/\[.*\]/){val=substr($0,RSTART+1,RLENGTH-2);gsub(","," ",val);print val}'  Input_file
awk 'match($0,/\[.*\]/){val=substr($0,RSTART+1,RLENGTH-2);gsub(","," ",val);printf("%s %.21f\n",val,$NF)}'  Input_file
关于你的第二个问题,请尝试以下内容

awk 'match($0,/\[.*\]/){val=substr($0,RSTART+1,RLENGTH-2);gsub(","," ",val);print val}'  Input_file
awk 'match($0,/\[.*\]/){val=substr($0,RSTART+1,RLENGTH-2);gsub(","," ",val);printf("%s %.21f\n",val,$NF)}'  Input_file

回答后一个要求,请尝试:

awk '
{
    split($0, a, "] +")
    gsub("[[,]", "", a[1])
    printf("%s %.21f\n", a[1], a[2])
}' file

您只需要一个regex字段分隔符和到变量的格式转换

$ awk -F'[][, ]+' '$NF=sprintf("%.21f",$NF)' file

编辑:使用sed,最简单的方法是
awk-F'[][,]+'{$NF=”“}1'

,第一个很简单,第二个几乎不可能。