다음과 같은 데이터가 포함된 파일이 있습니다.
Archie McNichol:(206) 548-1348:250:100:175
마지막 175에 100을 더하고 싶으므로 다음과 같이 인쇄됩니다.
Archie McNichol:(206) 548-1348:250:100:275
이것은 실제로 내가 가지고 있는 것입니다:
#!/bin/bash
while IFS=: read -r -a LINE
do
added=${LINE[3]} | 100
echo "${LINE[0]}" $added+100
done < "$1"
답변1
Jason Urian은 다음과 같이 말했습니다.
$ awk -F: '{$NF += 100}1' file
아니면 뻔한 누락( OFS
)을 수정하고 저처럼 작성하시면,
$ awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }' file >file.new
또는,
$ awk -v FS=':' -v OFS=':' '{ $NF += 100; print }' file >file.new
그러면 . file
라는 이름의 새 파일을 읽고 생성합니다 file.new
.
이 짧은 awk
스크립트는 각 행을 - file
로 :
구분된 필드로 구성된 것으로 처리합니다. 를 사용하면 $NF
각 행의 마지막 필드에 액세스할 수 있으며 $NF += 100
해당 값이 무엇이든 100을 더할 수 있습니다.
print
수정된 행이 출력 됩니다 ( 1
주석은 참값이며 awk
현재 행을 인쇄하는 기본 동작을 프롬프트합니다).
명령줄 옵션은 -v FS=':' -v OFS=':'
입력 및 출력 필드 구분 기호를 로 설정합니다 :
.
한 줄의 입력으로 테스트해 보세요.
$ echo 'Archie McNichol:(206) 548-1348:250:100:175' | awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }'
Archie McNichol:(206) 548-1348:250:100:275