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
. 이것은 1
print-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
-i
GNU 버전(또는 -i.bak
OSX/BSD) 의 경우 입력 파일 자체를 변경하려면
sed -i 's/-9$/+9/' file