截断前导零和填充等于UNIX中特定字段的空格数

时间:2014-09-18 17:22:58

标签: unix sed

如何从特定列中删除前导零和使用相等数量的空格填充。

A001|XYZ|00001|00234|0090
B001|XYZ|00010|00234|0990
C001|XYZ|00321|00234|0345
D001|XYZ|05001|00234|0777

字段3和5是整数字段,输出应如下所示 -

A001|XYZ|1....|00234|90..
B001|XYZ|10...|00234|990.
C001|XYZ|321..|00234|345.
D001|XYZ|5001.|00234|7...

('。'代表空格)

2 个答案:

答案 0 :(得分:2)

使用awkprintf非常简单:

awk '
BEGIN { FS = OFS = "|" }
{   len = length ($3)
     $3 = sprintf ("%*-d", len, $3)
    len = length ($5)
     $5 = sprintf ("%*-d", len, $5)
}1' file
A001|XYZ|1    |00234|90
B001|XYZ|10   |00234|990
C001|XYZ|321  |00234|345
D001|XYZ|5001 |00234|777

确定字段的长度。使用sprintf将值分配给同一列。使用*允许我们从参数取得的字段长度中捕获所需的空格数。

答案 1 :(得分:0)

sed ':again
   s/^\(\([^|]*\|\)\{2\}\)0\([0-9]*\)/\1\3 /
   t again
   s/^\(\([^|]*\|\)\{4\}\)0\([0-9]*\)/\1\3 /
   t again' YourFile

更容易为任何列(如果需要)

sed ':again
   s/\|0\([0-9]*\)/\1 /g
   t again' YourFile