두 문자열이 각각 동일한 숫자를 갖는 텍스트 파일의 문자열에 연속 숫자를 추가하는 방법은 무엇입니까?
예:
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"
"
여기서는 각 행을 -구분된 필드 집합으로 처리합니다 . 두 번째 필드 끝에 정수를 추가하여 수정하세요 awk
. 정수는 각 행마다 1씩 증가하지만 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