web-dev-qa-db-ja.com

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

与えられた:レコードには40列があります。 35番目の列を、35番目の列の内容と「$」記号で置き換えられるように、35番目の列を置き換えたいと思います。頭に浮かんだのは次のようなものです。

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

機能しますが、列の数が10kと大きい場合は実行できないためです。これを行うためのより良い方法が必要です。

33
Marcus Thornton

あなたはこのようにすることができます:

awk '$35=$35"$"'
39
cuonglm

これを行うには、おそらくもっと効率的な方法があります。その警告で:

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

元のフィールドセパレーターを予約するために、これを行いました。空白にしたかったカラムは$ 12でした。

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

gawk -iを使用すると、ファイルがあれば編集できます。

5
zee

フィールド区切り文字が<space>

sed 's/  */$&/35'
3
mikeserv

「承認された」回答を使用して問題があった場合、ファイルの最初の列だけではなく、それが置き換えられます。私はこの一般的なコマンドを使用します:

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

どこ:

  • [column] =変更する列は1から始まります(0ではありません)
  • [replace] =置き換えるテキスト
1
Jason G