파일에는 200줄이 있으며 각 줄은 동일합니다.
first,second,third
내가 달릴 때
awk -F"," '{$2="new second";print $0 > FILENAME}' OFS="," test
나는 214개의 행을 얻을 것이다. 마지막 16줄은
201 ,new second,third
202 first,new second,third
203 first,new second,third
204 first,new second,third
205 first,new second,third
206 first,new second,third
207 first,new second,third
208 first,new second,third
209 first,new second,third
210 first,new second,third
211 first,new second,third
212 first,new second,third
213 first,new second,third
214 fi,new second
나는 결과가 여러 번 부정확하다는 것을 의미하는 이러한 상황에 직면했습니다. 매번 줄 번호가 줄어듭니다. 하지만 이 예에서는 줄 번호가 증가하고 일부 줄이 잘못되었습니다.
,new second,third
fi,new second
답변1
처리하는 동안 동일한 파일로 리디렉션하면 이상한 결과가 발생합니다.
원본 파일을 덮어쓰려면 출력을 새 파일로 리디렉션한 다음 다시 이동할 수 있습니다.
awk -F"," '{$2="new second";print > FILENAME".new"}' OFS="," test && mv test.new test
또는
awk -F"," '{$2="new second";print}' OFS="," test > test.new && mv test.new test
답변2
두 개의 링크에서 답을 찾을 수 있습니다. 변경사항을 제자리에 저장
최신 GNU Awk(4.1.0 릴리스 이후)에는 "in-place" 파일 편집 옵션이 있습니다:
gawk 버전 4.1에는 다음 기능이 도입되었습니다. -i 및 --include 옵션은 awk 라이브러리 파일을 로드합니다.