如何从特定列中删除前导零和使用相等数量的空格填充。
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...
('。'代表空格)
答案 0 :(得分:2)
使用awk
和printf
非常简单:
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