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)