awkを使用して元のファイルを変更すると、正しい結果が得られません。

awkを使用して元のファイルを変更すると、正しい結果が得られません。

ファイルには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

おすすめ記事