![각 행에서 하나의 숫자를 추출하고 여기에 다른 숫자를 추가합니다.](https://linux55.com/image/129659/%EA%B0%81%20%ED%96%89%EC%97%90%EC%84%9C%20%ED%95%98%EB%82%98%EC%9D%98%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%EC%B6%94%EC%B6%9C%ED%95%98%EA%B3%A0%20%EC%97%AC%EA%B8%B0%EC%97%90%20%EB%8B%A4%EB%A5%B8%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%A9%EB%8B%88%EB%8B%A4..png)
내용이 다음과 같은 파일이 있습니다.
(bookmarks
("Cover"
"#01.djvu" )
("Title page"
"#all_24223_to_00243.cpc0002.djvu" )
("Preface"
"#all_24223_to_00243.cpc0004.djvu" )
...
내용을 다음으로 변경하고 싶습니다.
(bookmarks
("Cover"
"#2" )
("Title page"
"#3" )
("Preface"
"#5" )
...
이전 숫자를 유지하고 .djvu
앞에 오는 0을 제거한 후 1을 더합니다. 이 작업을 수행하기 위해 awk를 어떻게 사용하는지 궁금합니다.
감사해요.
답변1
이것은 직업에 더 가깝습니다 perl
.
perl -pe 's/"#\K.*?(\d+)\.djvu(?=")/$1+1/ge' <file
변수 포함:
INCR=1 perl -pe 's/"#\K.*?(\d+)\.djvu(?=")/$1+$ENV{INCR}/ge' <file
또는:
perl -spe 's/"#\K.*?(\d+)\.djvu(?=")/$1+$incr/ge' -- -incr=1 <file
답변2
GNU awk
솔루션은 다음과 같습니다.
awk '/^ *\(/{print}!/^ *\(/{split($1,aa,"[0-9]+",bb);printf "\"#%s\" )\n", bb[length(bb)]+1}'
또는 동일하지만 가독성을 위해 여러 줄에 걸쳐 표시됩니다.
awk '/^ *\(/ { print }
!/^ *\(/ { split( $1, aa, "[0-9]+", bb )
printf "\"#%s\" )\n", bb[length(bb)]+1 }'
/^ *\
!/^ *\(/
선택적 공백과 여는 대괄호로 시작하는 줄과 공백과 여는 대괄호를 포함하지 않는 줄을 포함하는 두 가지 주소 규칙입니다 .split( $1, aa, "[0-9]+", bb )
그렇지 않은 행의 경우 두 개의 배열로 분할합니다. 정규식과 일치하는 구분 기호aa
인 정규식 "[0-9]+"로 줄 내용을 구분합니다 .bb
마지막 요소bb
에 관심이 있습니다.printf "\"#%s\" )\n"
출력 라인을 포맷하고 단일 변수를 기다립니다...bb[length(bb)]+1
bb의 마지막 요소 값에 1을 더합니다.
답변3
gawk '{
sub(/#.*\.djvu/, "#" $1 + 1 ".djvu")
print
}' FPAT='[0-9]+\.djvu' input.txt
아이디어는 다음과 같습니다.
- 사용
.djvu
모드( .djvu
[0-9]+\.djvu
FPAT
예: 원본 파일명은 이고#all_24223_to_00243.cpc0002.djvu
, 추출된 부분은 입니다0002.djvu
. - 이전
djvu
파일 이름을#.*\.djvu
추출된 파일 이름으로 바꾸고1
이전 파일 이름을 늘립니다.예: 전체 행을 가져와서$0
다음#all_24223_to_00243.cpc0002.djvu
으로 바꿉니다 ( 에서 문자열을 숫자로 변환하는 방식으로 인해0002.djvu + 1
이 표현식은 순수한 숫자가 됩니다 ). 로고와 확장자를 추가합니다 .3
gawk
#
.djvu
결과:#3.djvu
.
djvu
이 솔루션은 예제 입력에 표시된 것처럼 파일 이름이 하나인 줄 에만 작동합니다 .
입력하다
(bookmarks
("Cover"
"#01.djvu" )
("Title page"
"#all_24223_to_00243.cpc0002.djvu" )
("Preface"
"#all_24223_to_00243.cpc0004.djvu" )
산출
(bookmarks
("Cover"
"#2.djvu" )
("Title page"
"#3.djvu" )
("Preface"
"#5.djvu" )