Replace awk/sed将分号分隔文件中的正值转换为负值
我有一个这样构建的文件:Replace awk/sed将分号分隔文件中的正值转换为负值,replace,sed,awk,gsub,Replace,Sed,Awk,Gsub,我有一个这样构建的文件: 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;
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
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
我唯一能确定的是,每件事都是“;”分开
我想将第四列中的值编辑为负值。在文件中,此值始终为正值
到目前为止,我想到的是:
[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,或者是否编辑原始文件或将其打印到新文件,这对我来说并不重要。我只想转换第三个“;”后面的值 您缺少设置为
的OFS代码>。您也可以这样做:
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
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
您缺少设置为的OFS
代码>。您也可以这样做:
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
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
不需要$4=0-$4
,$4=-$4
就足够了。+1,公认的答案有效,看起来很酷,但是这一行(远)比那一行好。此awk行仅处理文件一次。另一个在3个过程中进行3次。如果输入和问题一样小,就可以了。然而,当你点击一个大文件时……不需要$4=0-$4
,$4=-$4
就足够了。+1,公认的答案有效,看起来很酷,但是这一行比那一行(好得多)。此awk行仅处理文件一次。另一个在3个过程中进行3次。如果输入和问题一样小,就可以了。然而,当你碰到一个大文件时……哦,这很聪明+1.对于可以读取文件本身的命令,不应使用cat
<代码>修订文件名| sed的/;/-;/'|rev
,加上654分,你应该知道如何使用代码标签。你说得对,jotne,相应地修改了我的答案。谢谢。哦,真聪明+1.对于可以读取文件本身的命令,不应使用cat
<代码>修订文件名| sed的/;/-;/'|rev
,加上654分,你应该知道如何使用代码标签。你说得对,jotne,相应地修改了我的答案。谢谢