
2つの文字列がそれぞれ同じ数を持つテキストファイルの文字列に連続する数字を追加するにはどうすればよいですか?
例:
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であるため、結果は1行ずつだけで増加します。
答え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"
"
ここでは、各行を区切りフィールドセットとして扱います。 2番目のフィールドの末尾に整数を追加して修正してくださいawk
。整数は各行ごとに1ずつ増加しますが、2に分割されます。その結果、出力の数字は2行目ごとに1ずつ増加します(形式で数字を使用したときの丸めのため%d
)sprintf()
。
答え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