用零替换字符串中的空格

时间:2017-01-25 19:49:33

标签: bash shell

我的文件如下:

BRRD P 14 1 812 7 32.82  
RESD P 14 1 812 7 32.97  

AZEP P 14 1112053 13.87  
AZHS P 14 1112053 14.18  

我需要插入零,所以它看起来像:

BRRD P 1401081207 32.82  
RESD P 1401081207 32.97  

AZEP P 1401112053 13.87  
AZHS P 1401112053 14.18  

因此,第3列应始终是由10个字符组成的字符串。问题是空字符中缺少零。我想在第3列中用空格替换空格字符。

我尝试cat temp8 | sed 's/^ /0 /g' | sed 's/ $/ 0/g' | sed 's/ / 0/g' > temp9,但最终看起来像:

BRRD P 1312211336 058.52  
RESD P 1312211336 058.72  
0 00  
AZCT P 131222 055 036.99  
AZFS P 131222 055 00 .0  

我还考虑在某个行位置插入零,但第3列中的空字符是随机的。

有什么想法?谢谢!

3 个答案:

答案 0 :(得分:2)

使用awk即可:

awk '{val=$3; for (i=4; i<NF; i++) val = val "0" $i; print $1, $2, val, $NF}' file

BRRD P 1401081207 32.82
RESD P 1401081207 32.97

AZEP P 1401112053 13.87
AZHS P 1401112053 14.18

答案 1 :(得分:1)

Gnu awk和FIELDWIDTHS

$ awk 'BEGIN{OFS=""; FIELDWIDTHS="7 10 6"} {gsub(/ /,"0",$2)} 1' file
BRRD P 1401081207 32.82
RESD P 1401081207 32.97

AZEP P 1401112053 13.87
AZHS P 1401112053 14.18

<--7--><---10---><--6->

如上所述设置FIELDWIDTHS,并将第二个字段中的空格替换为0 s。 OFS必须为空。

答案 2 :(得分:-1)

检查以下代码。

${varName//Pattern/Replacement}

语法

call vendor/bin/dep