한 줄의 텍스트만 포함하는 텍스트 파일이 있습니다.
1314:Battery:1.90:50:30
a를 하고 50과 30 값을 아래와 같은 값으로 변경하는 grep
방법 이 없을까 고민 중입니다.sed
1314:Battery:1.90:45:35
50에서 5를 줄이고 30에서 5를 늘리겠습니다.
이 문제를 해결하는 더 좋은 방법이 있는지 안내해주세요. 저는 이제 막 이 스크립트를 배우기 시작했습니다. 감사합니다 =)
답변1
awk -F":" '{OFS=":"; print $1,$2,$3,$4-5,$5+5}' filename
산출:
1314: 배터리: 1.90:45:35
답변2
그리고 perl
:
perl -i -F: -lape '$F[3]-=5;$F[4]+=5;$_=join ":",@F' the-file
sh
(이 숫자는 항상 앞에 0이 없는 십진 정수라고 가정합니다):
IFS=: read -r a b c d e < the-file &&
printf '%s\n' "$a:$b:$c:$((d-5)):$((e+5))" > the-file
최신 버전의 GNU를 사용하세요 awk
:
gawk -i /usr/share/awk/inplace.awk -F: -vOFS=: '{$4-=5;$5+=5}1' the-file
사용하지 마세요-i inplace
현재 작업 디렉터리(as or)에서 확장 기능을 먼저 gawk
로드 하려고 하면 누군가가 해당 디렉터리에 악성 코드를 심었을 수 있습니다. 시스템과 함께 제공되는 확장 프로그램 의 경로 는 다를 수 있습니다. 출력을 참조하세요.inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'