使用perl或awk搜索文件中的数字,并从命令行以常量增加它们

时间:2011-09-27 16:46:27

标签: perl awk

我有一个包含3位数字的文件,我需要增加一定数量(实际上,我需要将所有大于某个值的数字增加一个恒定的数量)。如何从命令行尽可能简单地完成此操作?

编辑:澄清一下,文件中的文字多于数字,而且在awk中将它们作为字段提取并不容易。

4 个答案:

答案 0 :(得分:7)

这是一个示例,它将采用大于400的文件中的每个数字(井,正整数)并向其添加13。

perl -pe 's/\d+/$& > 400 ? $&+13 : $&/ge' file

\d+是正则表达式,它将匹配文本中的任何整数

$&是一个特殊的Perl变量,包含正则表达式匹配的文本。在这种情况下,它将是一个数字。

/e修饰符告诉Perl 评估替换表达式。在这种情况下,它会评估$& > 400 ? $&+13 : $&以获得不同的数字。

'/ g'修饰符替换每行上正则表达式的所有实例(整数)。

答案 1 :(得分:3)

怎么样:

awk '$1>300{$1+=100;print $0}' file

打开:

/home/sirch>cat file
313
233
133
413

成:

/home/sirch>awk '$1>300{$1+=100}1' file
413
233
133
513

答案 2 :(得分:0)

这可能不是最佳的紧凑,但这是我想到的第一件事:

perl -e 'my $file=$ARGV[0];my $amt_to_increase=$ARGV[1];
open(my $read,"<",$file) or die $!;my @lines=<$read>;close($read);
open(my $write,">","temp") or die $!;
foreach(@lines){print $write $_+$amt_to_increase . "\n";}
close($write);system("mv temp $file")==0 or die $!;' <file to read> <amount to add to each line>

答案 3 :(得分:0)

假设文件有3位数字,用换行符分隔:

$ cat file|while read number;do
if [ $number -gt $minvalue ]; then
    echo $(($number+$constant))
else
    echo $number
fi