更改逗号分隔列表中的最后一个条目

M--*_*M-- 8 shell-script text-processing

我有一个巨大的文本文件,看起来像这样:

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,3
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,8
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,12
Run Code Online (Sandbox Code Playgroud)

所需的输出是这样的:

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12
Run Code Online (Sandbox Code Playgroud)

我在这里和其他社区尝试了其他相关帖子,但无法完全得到我想要的。

更新

这是一个交叉问题(我想要 Unix/perl 答案和批处理/powershell 解决方案。)有有趣的答案。

Rom*_*est 14

带有sprintf函数的awk方法(添加前导零):

awk -F, -v OFS=',' '$8=sprintf("MI-%02d",$8);' file
Run Code Online (Sandbox Code Playgroud)

输出:

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12
Run Code Online (Sandbox Code Playgroud)

-F,- 将逗号设置,为字段分隔符

$8 - 指向第八个字段

%02d- 将函数参数视为2位数字的格式


请注意,记录中的最后一个字段可以由$NF.

NF是一个预定义的变量,其值为当前记录中的字段数

所以,$NF与$8(对于您的输入)相同

awk -F, -v OFS=',' '$(NF)=sprintf("MI-%02d", $(NF))' file
Run Code Online (Sandbox Code Playgroud)