내 입력 데이터 파일 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
좋은 결과.