내 텍스트 파일의 예:
03/Oct/2016:06:39:50-0500,cd/base/0/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/1/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/2/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/3/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/4/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/5/46/8.png,200,7208
...
base/
이 기사에서는 다음 규칙에 따라 숫자를 바꿔야 합니다 .
if that_number=0 then that_number=5
if that_number=1 then that_number=6
if that_number=2 then that_number=7
if that_number=3 then that_number=8
if that_number=4 then that_number=9
if that_number=5 then that_number=10
원하는 결과:
03/Oct/2016:06:39:50-0500,cd/base/5/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/6/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/7/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/8/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/9/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/10/46/8.png,200,7208
어떻게 할 수 있는지 아시나요?
답변1
Perl에서는 컨텍스트를 일치시키는 것이 쉽습니다.그리고추가를 하세요:
perl -pe 's,base/\K\d+,$& + 5,e' input_file
첫 번째 부분(until)을 잊어버리고 형식의 모든 항목을 일치시키고 나머지 부분을 일치하는 항목( )에 5를 더한 항목으로 바꿉니다. 단순한 문자열이 아닌 Perl 표현식으로 대체하십시오.base/<numbers>
\K
$&
e
답변2
awk
+5
모든 번호에서 작동한다는 사실을 활용할 수 있습니다 .
awk -F'/' '{$5+=5 ; print}' OFS='/' input_file
입력( ) 및 출력( ) 각각에 대한 필드 구분 기호로 사용되는 경우 /
필드 번호 5에 5를 추가해야 합니다.-F'/'
OFS='/')
여기서는 슬래시의 위치와 개수가 중요합니다.
답변3
sed
작동합니다:
sed \
-e 's/base\/1/base\/6/' \
-e 's/base\/2/base\/7/' \
-e 's/base\/3/base\/8/' \
-e 's/base\/4/base\/9/' \
-e 's/base\/5/base\/10/' \
-e 's/base\/0/base\/5/'
내 생각에는 "base/0" 사례를 끝에 넣어야 한다고 생각합니다. 그렇지 않으면 5 -> 10 사례도 시작됩니다.