我有一个像这样构建的文件:
1233;mc3; limit;1
946;mc3; limit;14545
0843;mc3; limit;2
443;mc3;Short ;1012
1309;mc3;Short ;1
1247;mc3;Short ;1121
989;mc3;Short ;1
1340;mc3;Short ;14545
170;mc3;Short limit;1
105964;mc3; rep;2000000
4934;mc3; rep;1
3028;mc3; rep;14545
我唯一知道的是,每个人都是';'分离。
我想将第四列中的值编辑为否定值。在文件中,此值始终为正值。
到目前为止,我想出的是:
[usr@serv] cat list | awk -F";" '{gsub ("^","-",$4);print}'
123213 mc limit -1
946 mc limit -14545
08743 mc limit -2
4493 mc Short -1012
13009 mc Short -1
12147 mc Short -1121
9989 mc Short -1
13490 mc Short -14545
1780 mc Short limit -1
1054964 mc rep -2000000
49324 mc rep -1
30828 mc rep -14545
但是你可以看到它删除了“;”。我在这做错了什么?
如果我使用awk或sed,或者我编辑原始文件或将其打印到新文件,对我来说并不重要。我只想在第三个“;”之后转换值。
答案 0 :(得分:3)
rev filename | sed 's/;/-;/' | rev
答案 1 :(得分:2)
您遗失OFS
设置为;
。你也可以这样做:
awk -F\; '{$4=0-$4}8' OFS=\; file
1233;mc3; limit;-1
946;mc3; limit;-14545
0843;mc3; limit;-2
443;mc3;Short ;-1012
1309;mc3;Short ;-1
1247;mc3;Short ;-1121
989;mc3;Short ;-1
1340;mc3;Short ;-14545
170;mc3;Short limit;-1
105964;mc3; rep;-2000000
4934;mc3; rep;-1
3028;mc3; rep;-14545
答案 2 :(得分:1)
sed 's/\([0-9]*$\)/-\1/' filename