用右边的空间规范化列填充

时间:2019-07-19 16:37:28

标签: perl awk sed

使用下面的示例日志文件:

1;000117;20190529;055529;9521;0988388019
1;000015;20190529;071944;2222;2231
1;000012;20190529;072734;4258;4252
1;000006;20190529;073336;2226;1000
3;000005;20190529;073715;1000;037760967
3;000004;20190529;073751;1000;037760967

我需要对最后一列用空格进行归一化,直到它们的长度= 25

尝试使用不成功的perl代码:

perl -F';' -lane '$F[5] = $F[5], sprintf "% 25d"; $" = ";"; print "@F"'

我需要以下输出:

1;000117;20190529;055529;9521;0988388019               
1;000015;20190529;071944;2222;2231                     
1;000012;20190529;072734;4258;4252                     
1;000006;20190529;073336;2226;1000                     
3;000005;20190529;073715;1000;037760967                
3;000004;20190529;073751;1000;037760967                

3 个答案:

答案 0 :(得分:3)

$ awk 'BEGIN{FS=OFS=";"} {$NF=sprintf("%-25s",$NF)}1' file
1;000117;20190529;055529;9521;0988388019
1;000015;20190529;071944;2222;2231
1;000012;20190529;072734;4258;4252
1;000006;20190529;073336;2226;1000
3;000005;20190529;073715;1000;037760967
3;000004;20190529;073751;1000;037760967

所以您可以看到空格:

$ awk 'BEGIN{FS=OFS=";"} {$NF=sprintf("%-25s",$NF)}1' file | tr ' ' '#'
1;000117;20190529;055529;9521;0988388019###############
1;000015;20190529;071944;2222;2231#####################
1;000012;20190529;072734;4258;4252#####################
1;000006;20190529;073336;2226;1000#####################
3;000005;20190529;073715;1000;037760967################
3;000004;20190529;073751;1000;037760967################

答案 1 :(得分:1)

您在正确的轨道上。更成功的Perl代码:

perl -F';' -lane '$F[5]=sprintf("%-25s",$F[5]);print join ";",@F'
perl -F';' -pane '$F[5]=sprintf("%-25s",$F[5]);$_=join ";",@F'

答案 2 :(得分:0)

这可能对您有用(GNU sed):

export declare class TekButtonModule {
}

如果最后一个字段的长度不超过25个字符,请添加一个空格,直到它为止。