我有超过2k行的文件,如下所示:
pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (26916,1000,3750,'','','11',null,NULL,1)
pla (IdPl,EncLevel,IdSection) Values (26916,2,21)
pla(IdPl,EncLevel,IdSection) Values (26916,1,1065)
Pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (26917,2900,3750,'','','11',null,NULL,1)
Pla(IdPl,EncLevel,IdSection) Values (26917,2,21)
Pla (IdPl,EncLevel,IdSection) Values (26917,1,1065)
Pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (26918,1050,3750,'','','11',null,NULL,1)
Pla (IdPl,EncLevel,IdSection) Values (26918,2,21)
Pla (IdPl,EncLevel,IdSection) Values (26918,1,1065)
Pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (26919,1100,3750,'','','11',null,NULL,1)
Pla (IdPl,EncLevel,IdSection) Values (26919,2,21)
Pla (IdPl,EncLevel,IdSection) Values (26919,1,1065)
如何使用sed或awk替换所有26916 on -1,26917 on -2等?
答案 0 :(得分:3)
使用perl
非常简单:
$ perl -pe 's/(2691\d)/ - ( $1 - 26915 ) /e' file
这打印到stdout。根据需要重定向...
答案 1 :(得分:3)
使用sed
:
sed -r 's/(.*)([0-9]{5})(.*)/echo "\1$((-(\2-26915)))\3"/ge' file
答案 2 :(得分:0)
使用GNU awk为第3个arg匹配():
$ awk 'match($0,/(.*\()([0-9]{5})(,.*)/,a) {$0 = a[1] "-" a[2]-26915 a[3]} 1' file
pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (-1,1000,3750,'','','11',null,NULL,1)
pla (IdPl,EncLevel,IdSection) Values (-1,2,21)
pla(IdPl,EncLevel,IdSection) Values (-1,1,1065)
Pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (-2,2900,3750,'','','11',null,NULL,1)
Pla(IdPl,EncLevel,IdSection) Values (-2,2,21)
Pla (IdPl,EncLevel,IdSection) Values (-2,1,1065)
Pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (-3,1050,3750,'','','11',null,NULL,1)
Pla (IdPl,EncLevel,IdSection) Values (-3,2,21)
Pla (IdPl,EncLevel,IdSection) Values (-3,1,1065)
Pl (IdPl,X,Y,TitleLine,Name,Description,idRowMetric,idPlMetric,Person) Values (-4,1100,3750,'','','11',null,NULL,1)
Pla (IdPl,EncLevel,IdSection) Values (-4,2,21)
Pla (IdPl,EncLevel,IdSection) Values (-4,1,1065)
使用其他awks,你只需使用substr()而不是数组。