Bash 将字符串中的空白替换为零
我的文件看起来像:Bash 将字符串中的空白替换为零,bash,shell,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 我需要插入零,使其看起来像: BRRD P 14 1 8
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
我需要插入零,使其看起来像:
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
因此,第三列应该始终是由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列中的空字符是随机的
有什么想法吗?谢谢大家! 检查下面的代码
x="1401081207 32.82"
echo "${x// /0}"
语法
${varName//Pattern/Replacement}
使用
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
awk'{val=$3;对于(i=4;ignuawk和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->
$awk'BEGIN{OFS=”“;FIELDWIDTHS=“7 10 6”}{gsub(/,“0”,$2)}1'文件
BRRD P 1401081207 32.82
RESD P 1401081207 32.97
AZEP P 1401112053 13.87
AZHS P 1401112053 14.18
如上所述设置FIELDWIDTHS
,并将第二个字段中的空格替换为0
s。OFS
必须为空。所需的输出不会将所有空格替换为0。等一下,让我再试一次。在上面的示例0000this0000is000000a000test000bash中,我的输出正在处理我的输出