特定の列の内容をawkに置き換える方法は?

特定の列の内容をawkに置き換える方法は?

仮定:レコードには40個の列があります。 35列を35列の内容と「$」記号に置き換えるように35列を変更したいと思います。私が思いついた内容は次のとおりです。

awk '{print $1" "$2" "...$35"$ "$36...$40}'

動作しますが、列数が10kほど大きい場合は実現できません。これを行うには、より良い方法が必要です。

答え1

次のことができます。

awk '$35=$35"$"'

答え2

これを行うより効率的な方法があるかもしれません。この警告とともに:

awk '{$35 = $35"$"; print}' infile > outfile

答え3

元のフィールド区切り記号を維持するためにこれを行いました。空にする列は$ 12です。

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

可能であれば、を使用してgawk -iファイルをその場で編集できます。

答え4

「承認された」回答を使用すると問題が発生します。これはファイルの最初の列だけを置き換えるものではありません。私は次の一般的なコマンドを使用します。

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

どこ:

  • [column]=変更したい列、1から始まる(0の代わりに)
  • [replace]= 置き換えたいテキスト

関連情報