一致する列で文字列を置き換える方法は?

一致する列で文字列を置き換える方法は?

これがファイルだと仮定

abc,def,ghi 
1,a,zeta
2,b,beta
3,c,ceta
4,d,xaq
5,gh,lpa

上記は単なる例であり、実際には多くの列があるため、ヘッダーが一致する列文字列を変更する必要があります(たとえば、ヘッダー名「def」をNAに変更)。予想される出力は次のとおりです。

abc,def,ghi 
1,NA,zeta
2,NA,beta
3,NA,ceta
4,NA,xaq
5,NA,lpa

次のコマンドを使用すると、ヘッダー名が「def」の列のみを印刷できます。

awk -F, 'NR==1{for(i=1;i<=NF;i++)if($i~/def/)f[n++]=i}{for(i=0;i<n;i++)printf"%s%s",i?" ":"",$f[i];print""}' /tmp/test

しかし、AWKだけを使用してテキストファイルのすべての内容を変更して印刷する方法はありますか?注:常に2番目の列であることは確認されていません。

ベストアンサー1

使用Miller:

$ mlr --csv put '$def = "NA"' file

を使用すると、-I「その場で」変更が行われ、端末に何も出力せずに元のファイルを変更します。

おすすめ記事