특정 필드의 특정 텍스트만 바꾸려면 nawk를 사용하세요.

특정 필드의 특정 텍스트만 바꾸려면 nawk를 사용하세요.

내 입력 데이터 파일 abc.txt에는 다음이 있습니다.

"20131008","0004","0568","98"

이 명령을 실행하여 텍스트를 바꿉니다.

nawk -F, -vOFS=',' '{gsub("0568","0808",$3); print }' abc.txt

출력에서 구분 기호 ","는 공백으로 대체됩니다. 출력은 다음과 같습니다.

 "20131008" "0004" "0568" "98".

이 문제를 해결하는 데 도움을 줄 수 있는 사람이 있나요? 교체해 보았 -vOFS으나 소용이 없었습니다.

답변1

이 답변은 awk명령줄 출력과 파일 변경 모두에 대한 예시와 예를 보여줍니다.sed

의 경우 명령줄 출력(또는 변수)에서 변경된 문자열을 사용하고 awk수신 $ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt하지만 원본 파일은 변경되지 않습니다.

$ cat input.txt 
"20131008","0004","0568","98"
$ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
"20131008" "0004" "0808" "98"

의 경우 플래그가 내부 변경(즉, 원본 파일의 수정)을 나타내는 간단한 sed형식을 사용합니다 .sed -i 's/string to replace/new string/g' input.txt-i

$ cat input.txt 
"20131008","0004","0568","98"
$ sed -i 's/0568/0808/g' input.txt
$ cat input.txt 
"20131008","0004","0808","98"

요청하신 내용은 아니지만 nawk(저는 설치하지 않았습니다) 도움이 되셨기를 바랍니다.

답변2

나는 하나도 없지만 nawk이것이 나에게 도움이 되었습니다( 스위치 gawk사용 ).--posix

awk 'BEGIN{FS=OFS=","}{sub(/0568/,"0808",$3)}1' file

Fedokhi의 코멘트-v OFS=','대신 사용해야 할 수도 있지만 -vOFS=','입력 및 출력 구분 기호가 동일하면 블록의 할당이 BEGIN너무 길지 않습니다. 또한 한 번만 대체하려는 것 같으므로 gsub으로 변경하겠습니다 . sub두 함수의 첫 번째 매개변수는 정규식이므로 문자열을 전달하면 안 됩니다.

산출:

"20131008","0004","0808","98"

답변3

나는 이것을 시도했습니다 :

nawk 'BEGIN { FS=OFS="," } { sub("0568","0808",$3) }1' abc.txt

좋은 결과.

관련 정보