Awk

重新格式化特定列中的數字

  • May 11, 2021

我有分號分隔的數據,其中第三列是十進制數:

A;B;1234.56
C;D;789.23

我需要對數字的格式進行 2 處更改:

  1. 刪除小數點後的數字
  2. 在數字上添加“千位分隔符”

所以1234.56會變成1'234

我能夠完成第一部分,但不知道如何添加千位分隔符:

printf "A;B;1234.56\nC;D;789.23\n" | awk -F';' '{gsub(/\.../,"",$3) ; printf "%s,%s,%s\n", $1, $2, $3 }'

我怎樣才能做到這一點 ?

使用LC_NUMERIC='en_US.UTF-8'語言環境(支持逗號作為數字的千位分隔符格式)和使用sprintf’s %\047d(%\047d只是另一種%'d使用Octal Escape Sequences編寫單引號的類型,或者您也可以編寫它%'\''d)格式修飾符來強制轉換將浮點數轉換為整數並使用逗號作為千位分隔符,然後我們使用該gsub()函式將逗號轉換為單引號。

$ LC_NUMERIC='en_US.UTF-8' awk 'BEGIN{ FS=OFS=";" }
 { $3=sprintf ("%\047d", $3); gsub(",", "\047", $3) }1' infile
A;B;1'234
C;D;789

引用自:https://unix.stackexchange.com/questions/649157