CSVの右パッド番号にsedを使用する

CSVの右パッド番号にsedを使用する

次の数千の行があります。

e0f186cf-c34d-42e9-b8a9-9b9cf1f304e7,TotalNumberOfHandledConnectionsOrSessions,TotalNumbe1211008586,1457343000,179.00

最後の列はタイムスタンプです。問題は、それが秒単位でミリ秒単位で必要であることです。

だから、その数を000で埋めたいと思います。

ただし、いつかこの行にミリ秒を含めることができるため、この場合は000を追加しないでください。

私は成功せずにsedを使ってこのサイトのいくつかの例を試しました。

答え1

(GNU)を含むawk

awk 'BEGIN { FS="," ; OFS="," } { if ( length($4)=10 ) { $4=$4"000" ; print $0 } else print $0 }' file

説明する:

  • BEGIN { FS="," ; OFS="," }:入力(FS)および出力(OFS)フィールド区切り文字を最初にコンマに設定します。
  • 4列目の長さが10で、0を3つ加えてすべて出力する場合
  • それ以外の場合はすべて印刷

答え2

sed 's/,\([0-9]\{10\}\),\([0-9]*\.[0-9]*\)$/,\1000,\2/'

これは次のパターンと一致します。

  1. 斑点、
  2. 正確に10桁、
  3. 斑点、
  4. いくつかの数字、
  5. ピリオド(エスケープ済み)、
  6. いくつかの数字、
  7. 行末

次に交換してください。

  1. 斑点、
  2. 10桁(逆参照基準\1)、
  3. 3つの0、
  4. 斑点、
  5. 逆参照として表示される最後のフィールドです\2

関連情報