尝试提取括号(AA)之间的数字并修改(例如乘以300)并使用全文中的新值(AA * 300)更新旧值(AA)。
示例输入:
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
预期产出:
+
答案 0 :(得分:0)
gawk
救援!
$ awk '{print $1,$2,"("300*gensub(/\((.*)\);/,"\\1",1,$3)");"}' file
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
条件基于括号中的值
$ awk '{v=gensub(/\((.*)\);/,"\\1",1,$NF); if(int(v)==v) $NF="("(300*v)");"}1' file
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
ZZZ FFF (2,3);
我将最后一行添加到输入文件中。
也许这是一个更好的解决方案,只限制整数匹配
$ awk '{if(match($NF,/\([0-9]+\)/))
$NF="(" 300*substr($NF,RSTART+1,RLENGTH-2) ");"}1' file
RRRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);
ZZZ FFF (2,3);
答案 1 :(得分:0)
在Perl中,程序上:
my $str = 'RRRR TTTTYYY (22)';
my $num = $1 if $str =~ /\((\d+)\)/;
my $result = $num * 300;
$str =~ s/$num/$res/;
print $str;
功能:
sub x {
my $str = @_;
my $num = $1 if $str =~ /\((\d+)\)/;
my $result = $num * 300;
$str =~ s/$num/$res/;
return $str;
}
print x('RRRR TTTTYYY (22)');
作为单行,其中file.txt
每行包含一个字符串
perl -lne '$num = $1 if $_ =~ /\((\d+)\)/; $res = $num * 300; $_ =~ s/$num/$res/; print' file.txt
答案 2 :(得分:0)
如果字符串中的唯一数字是括号内的数字,那么在Perl中这很简单:
$ perl -pE 's/(\d+?)/300*$1/eg' your_input_file.txt
RRR TTTTYYY (6600);
UUUUUUU IIIIII1200 (16500);
如果你需要检查括号,那就更难了
$ perl -pE 's/(?<=\()(\d+?)(?=\))/300*$1/eg' your_input_file.txt
RRR TTTTYYY (6600);
UUUUUUU IIIIII4 (16500);