【问题标题】:Perl or shell - Get the number from a string variable and increment the number by 1Perl 或 shell - 从字符串变量中获取数字并将数字增加 1
【发布时间】:2015-12-28 07:02:03
【问题描述】:

我正在用 shell 编写一个脚本,我有一个像这样的变量 -

$ grep A41A41 file
A41A41  06

我想 grep 一个特定的字符串组合,如上所示,并将与字符串关联的数字(在 2 个空格后的同一行中)增加 1。并将文件的其余部分保持原样(文件将有大约 800 行)。 09 应该变成 10,99 应该变成 01。 此外,A41A41 将是一个变量,在 for 循环中,该变量的值将在每次迭代中发生变化 我在 for 循环中执行所有这些操作,因此我还需要考虑递增的性能。

感谢您帮助解决此问题。

【问题讨论】:

  • 变量在哪里?
  • 你确定99 + 1 应该变成01 而不是00 吗?
  • A41A41 将是一个变量,在 for 循环中,该变量的值将在每次迭代中发生变化..

标签: string perl shell increment


【解决方案1】:

不清楚 09 会发生什么 - 它应该变成 10 还是 010?

Perl 中的前者:

perl -i~ -pe 's/(A41A41\s+)([0-9]+)/sprintf "%s%02d", $1, $2 + 1/e' file

要获得 99 -> 01 转换,请使用

($2 + 1) % 99 || 99

【讨论】:

  • 谢谢,09 应该变成 10,99 应该变成 01。
  • 是的,沃尔特。 99 + 1 应该变成 01。
  • Jens,我试过了,grep -> 将数字存储在变量中 -> 递增 -> 重写。但是考虑到大约 800 次迭代,这非常慢,我认为这不是正确的方法。
  • ($2 + 1) % 99 -- 但是我们有 98 -> 00
  • @glennjackman:s/(\Q$ENV{key}\E\s+)...,以及如何解决 98 -> 00 的更新 :-)
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多