web-dev-qa-db-ja.com

awk-特定の列の1文字だけを置き換える

次のようなファイルがあります。

2018.01.02;1.5;comment 1
2018.01.04;2.75;comment 2
2018.01.07;5.25;comment 4
2018.01.09;1.25;comment 7

すべてのドットを置き換えたい. 2列目にコンマ,と同じようにsed 's/\./\,/g' file 2列目にのみこれを適用するためにsedまたはできればawkをどのように使用できますか。したがって、出力は次のようになります。

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
12
nath
_$ awk 'BEGIN{FS=OFS=";"} {gsub(/\./, ",", $2)} 1' ip.txt
2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
_
  • _BEGIN{}_このコードブロックは、入力行を処理する前に実行されます
  • _FS=OFS=";"_入力フィールドと出力フィールドの区切り文字を_;_に設定
  • 各入力行のgsub(/\./, ",", $2)、2番目のフィールドのすべての_._を_,_に置き換えます
  • _1_は、_$0_(入力レコードを含む)の内容を出力するawkイディオムです。
20
Sundeep
sed 's/\./,/3' file

ドットの3番目の出現を置き換える

8

Awkを使用して以下の方法で実行

コマンド:awk -F ";" '{gsub(/\./,",",$2);print $1";"$2";"$3}' filename

出力

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
4