我有以下txt
604024692;-27.34
500570067;-.0835
604013284;0.00006
603839102;-.1121
我希望它是:
604024692;27.34
500570067;0.0835
604013284;0.00006
603839102;0.1121
但是当我跑到
以下时sed 's/-/\0/'
它给了我
604024692;027.34
500570067;0.0835
604013284;0.00006
603839102;0.1121
我正在使用AIX 7.1 任何帮助表示赞赏。
答案 0 :(得分:3)
$ awk 'BEGIN{FS=OFS=";"} {$2=($2<0?-$2:$2)}1' file
604024692;27.34
500570067;0.0835
604013284;0.00006
603839102;0.1121
答案 1 :(得分:1)
这个单行可能会有所帮助:
awk -F';' -v OFS=";" '{sub(/^-/,"0",$2);$2+=0}7' file
这个想法是,在替换之后,我们让awk处理前导零。
以您的数据为例:
kent$ cat f
604024692;-27.34
500570067;-.0835
kent$ awk -F';' -v OFS=";" '{sub(/^-/,"0",$2);$2+=0}7' f
604024692;27.34
500570067;0.0835
答案 2 :(得分:0)
您可以尝试以下sed命令。
$ sed 's/-//g;s/\(^\|;\)\./\10./g' file
604024692;27.34
500570067;0.0835
s/-//g
,删除所有减号。 s/\(^\|;\)\./\10.
匹配分号旁边的点或点旁边的点,并将匹配替换为组索引1中的字符加上数字0
加上一个点。