유닉스 파일의 특정 숫자 바꾸기

유닉스 파일의 특정 숫자 바꾸기

Unix 파일 시스템에서 특정 숫자를 대체할 수 있는 명령을 만들고 싶습니다. 예를 들면 다음과 같습니다.

ZAR     ZEC      ZDA
-9         2      3
4          8      -9
5          6      7

내 제목은 ZAR, 입니다 ZEC.ZDA-9를 ZDA+9로 바꿔야 합니다.. ZAR필드에 있는 다른 값(예: "-9")이 아닌 해당 숫자를 변경하려면 어떤 명령을 작성해야 합니까 ?

답변1

-9파일의 세 번째 열에 나타나는 내용을 다음으로 변경하려면 다음을 수행하세요 +9.

$ awk '$3==-9 {$3="+9"} 1' OFS='\t' file
ZAR     ZEC     ZDA
-9      2       3
4       8       +9
5       6       7

$3==-9세 번째 열에서 행을 선택합니다 -9. 이러한 행의 경우 할당은 $3="+9"열을 로 변경합니다 +9. 이것은 1print-the-line에 대한 awk의 신비한 속기입니다. 마지막으로 OFS='\t'탭 문자를 필드 구분 기호로 사용하여 출력을 인쇄하도록 awk에 지시합니다.

제자리에서 파일 변경

GNU awk 사용(Linux):

awk -i inplace '$3==-9 {$3="+9"} 1' OFS='\t' file

BSD/OSX awk 사용:

awk '$3==-9 {$3="+9"} 1' OFS='\t' file >tmp && mv tmp file

답변2

$ cat file
ZAR     ZEC      ZDA
-9         2      3
4          8      -9
5          6      7

ZDA열이 마지막 필드이기 때문에

$ sed 's/-9$/+9/' file
ZAR     ZEC      ZDA
-9         2      3
4          8      +9
5          6      7

-iGNU 버전(또는 -i.bakOSX/BSD) 의 경우 입력 파일 자체를 변경하려면

sed -i 's/-9$/+9/' file

관련 정보