将连续数字添加到文本文件中的某个字符串(两两相同的数字)

将连续数字添加到文本文件中的某个字符串(两两相同的数字)

如何将连续数字添加到文本文件中的字符串中,其中两个字符串各自具有相同的数字?

例子:

id="picture-"
id="picture-"
id="picture-"
id="picture-"
...

结果:

id="picture-1"
id="picture-1"
id="picture-2"
id="picture-2"
...

该数字不在行中的最后位置。我已经尝试过这个:

perl -pe 's/picture\-/$& . ++$n/ge' index.txt

但这会将数字相加,每个字符串都会得到另一个数字。

任何帮助,将不胜感激。

答案1

你总是可以这样做:

perl -pe 's/picture-\K/1+($n++>>1)/ge' index.txt

要从头开始生成数据:

seq -f 'id="picture-%.0f"' 10 | sed p

答案2

perl对你的一句话稍作修改:

perl -mPOSIX -pe 's/picture\-/$& . POSIX::ceil(++$n\/2)/ge' index.txt

附加的数字现在是 n 的一半,四舍五入,因此结果只会每隔一行增加一次。

答案3

$ awk -F '"' 'BEGIN { OFS=FS; n=1 } { $2 = sprintf("%s%d", $2, ++n/2); print }' file
id="picture-1"
id="picture-1"
id="picture-2"
id="picture-2"

在这里,我们将每一行视为一组"-delimited 字段。通过在第二个字段末尾添加一个整数来修改它awk。该整数每行增加一,但也除以二。结果是输出中的数字每第二行增加一(由于在 中的格式中使用数字时进行了舍入%dsprintf()

答案4

我会使用 for 循环。

假设:

  • 您知道要创建的最大条目数。
  • 前缀是不变的。
  • 您的输出只是“前缀数字”。
#!/bin/sh

# Define constants
prefix="picture-"
max_count=30

# For/Next style loop
for i in ((i=1;i<=$max_count;i++))
do
    echo "${prefix}${i}"
end

相关内容